这里的答案并不完整!
首先,让我们检查文档!
void deleteInBatch(Iterable<T> entities)
Deletes the given entities in a batch which means it will create a single Query.
因此,“delete[All]InBatch”方法将使用JPA批量删除,例如“从表中删除[WHERE ...]”。这可能更有效率,但它有一些警告:
- 这不会调用您可能拥有的任何 JPA/休眠生命周期挂钩(@PreDelete)
- 它不会级联到其他实体
- 您必须清除持久性上下文,或者只是假设它已失效。
这是因为 JPA 会向数据库发出批量 DELETE 语句,绕过缓存等,因此无法知道哪些实体受到影响。
请参阅休眠文档
Spring Data JPA 中的实际代码
虽然我在这里找不到具体的文章,但我会推荐Vlad Mihalcea写的所有内容,以便更深入地了解JPA。
TLDR:“inBatch”方法使用批量 DELETE 语句,这可以大大加快速度,但有一些警告 bc。它们绕过 JPA 缓存。您应该真正了解它们的工作原理以及何时使用它们来受益。