Ответ 1
Метод delete
собирается удалить вашу сущность за одну операцию. deleteInBatch
собирается выполнить несколько операций удаления и удалить их как 1 операцию.
Если вам нужно много операций удаления, пакетное удаление может быть быстрее.
В чем разница между методами delete(...)
и deleteInBatch(...)
в JpaRepostory в Spring? Второй "удаляет элементы в одном операторе SQL", но что это значит с точки зрения приложения/базы данных? Почему существуют два разных метода с одинаковыми результатами и когда лучше использовать один или другой?
РЕДАКТИРОВАТЬ: То же самое относится и к deleteAll()
и deleteAllInBatch()
...
Метод delete
собирается удалить вашу сущность за одну операцию. deleteInBatch
собирается выполнить несколько операций удаления и удалить их как 1 операцию.
Если вам нужно много операций удаления, пакетное удаление может быть быстрее.
deleteInBatch(...)
в журнале будет выглядеть следующим образом: DELETE FROM table_name WHERE (((((((? = id) OR (? = id)) OR (? = id)) OR (? = id)) OR (? = id)) OR (? = id)) OR (? = id))
Это может привести к проблеме, если удаляется большой объем данных, который достигает максимального размера запроса SQL-сервера: максимальный размер для запроса SQL Server? В пункте? Есть ли лучший подход
Ответы здесь не полны!
Прежде всего, давайте проверим документацию!
void deleteInBatch(Iterable<T> entities)
Deletes the given entities in a batch which means it will create a single Query.
Таким образом, методы "delete [All] InBatch" будут использовать пакетное удаление JPA, например "DELETE FROM table [WHERE...]". Это может быть ПУТИ более эффективным, но у него есть некоторые оговорки:
Это потому, что JPA будет выдавать массовый оператор DELETE в базу данных, обходя кэш и т.д. И, следовательно, не может знать, какие объекты были затронуты.
Фактический код гдев Spring Data JPA
И хотя я не могу найти здесь конкретную статью, я бы порекомендовал все, что написал Влад Михалча, чтобы глубже понять JPA.
TLDR: методы "inBatch" используют массовые операторы DELETE, которые могут быть значительно быстрее, но с некоторыми оговорками bc. они обходят кеш JPA. Вы должны действительно знать, как они работают и когда использовать их для выгоды.