В чем разница между deleteAllInBatch () и deleteAll ()? - PullRequest
0 голосов
/ 04 октября 2019

Я новичок в спящем и весеннем ботинке. Недавно мне было поручено создать приложение для реляционных приложений. Проблема в том, что учебник, которому я следую, использует JPARepository, а предыдущая работа в коде, над которым я работаю, использует CRUDRepository.

У меня вопрос, могу ли я использовать функцию crudRepository deleteAll () вместоМетод JPARepository deleteAllInBatch ()? Кроме того, насколько отличаются эти два интерфейса?

Я не нашел никакой полезной документации в Интернете, поэтому запрос.

1 Ответ

1 голос
/ 04 октября 2019

Короткий ответ: да, вы можете использовать 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 - общий размер целевой таблицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...