企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# 19.5.4\. 一次性删除(One shot delete) 偶尔的,逐个删除集合类中的元素是相当低效的。Hibernate并没那么笨, 如果你想要把整个集合都删除(比如说调用list.clear()),Hibernate只需要一个DELETE就搞定了。 假设我们在一个长度为20的集合类中新增加了一个元素,然后再删除两个。 Hibernate会安排一条`INSERT`语句和两条`DELETE`语句(除非集合类是一个bag)。 这当然是显而易见的。 但是,假设我们删除了18个数据,只剩下2个,然后新增3个。则有两种处理方式: * 逐一的删除这18个数据,再新增三个; * 删除整个集合类(只用一句DELETE语句),然后增加5个数据。 Hibernate还没那么聪明,知道第二种选择可能会比较快。 (也许让Hibernate不这么聪明也是好事,否则可能会引发意外的“数据库触发器”之类的问题。) 幸运的是,你可以强制使用第二种策略。你需要取消原来的整个集合类(解除其引用), 然后再返回一个新的实例化的集合类,只包含需要的元素。有些时候这是非常有用的。 显然,一次性删除并不适用于被映射为`inverse="true"`的集合。