Zakładając, że MyEntity
odnosi się do stołu chcesz usunąć można postępować w następujący sposób:
// Criteria API (JPA 2.1 and above)
CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaDelete<MyEntity> query = builder.createCriteriaDelete(MyEntity.class);
query.from(MyEntity.class);
em.createQuery(query).executeUpdate();
lub uogólnionego podejścia:
public <T> int deleteAllEntities(Class<T> entityType) {
CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaDelete<T> query = builder.createCriteriaDelete(entityType);
query.from(entityType);
return em.createQuery(query).executeUpdate();
}
Podobnie dla JPQL/SQL zapytania:
// JPQL
em.createQuery("DELETE FROM MyEntity e").executeUpdate();
// SQL
em.createNativeQuery("TRUNCATE TABLE MyEntity").executeUpdate();
lub uogólnionego podejścia:
public static <T> int deleteAllEntities(Class<T> entityType) {
String query = new StringBuilder("DELETE FROM ")
.append(entityType.getSimpleName())
.append(" e")
.toString();
return em.createQuery(query).executeUpdate();
}
public static <T> int truncateTable(Class<T> entityType) {
String query = new StringBuilder("TRUNCATE TABLE ")
.append(entityType.getSimpleName())
.toString();
return em.createNativeQuery(query).executeUpdate();
}
kryteria API można użyć tylko SELECT, UPDATE, DELETE TRUNCATE zatem nie jest możliwe.
Myślę, że nie ma czegoś takiego jak "skracanie" w JPQL, można napisać natywne zapytanie lub użyć JPQL "delete". –