Короткий ответ: да, вы можете использовать deleteAll вместо deleteAllInBatch. Но вы должны знать, что реализация этих функций очень различна. deleteAllInBatch выполняет свою работу, используя один запрос на удаление.
@Transactional
public void deleteAllInBatch() {
em.createQuery(getDeleteAllQueryString()).executeUpdate();
}
private String getDeleteAllQueryString() {
return getQueryString(DELETE_ALL_QUERY_STRING, entityInformation.getEntityName());
}
public static final String DELETE_ALL_QUERY_STRING = "delete from %s x";
С другой стороны, deleteAll () приводит к findAll, и после этого мы будем перебирать все сущности и вызывать delete для каждой из них.
@Transactional
public void deleteAll() {
for (T element : findAll()) {
delete(element);
}
}
Как мы видим, deleteAll приводит к N + 1 запросам, где N - общий размер целевой таблицы.