从“Apress - 从新手到专业人士开始休眠”p。161,在那里他们解释了包的收集:
如果元素缺少正确的键,则会在对包的内容执行更新或删除操作时表现出性能影响。
正确的密钥是什么意思?
为什么在对包元素执行更新或删除操作的情况下会对性能产生影响?
从“Apress - 从新手到专业人士开始休眠”p。161,在那里他们解释了包的收集:
如果元素缺少正确的键,则会在对包的内容执行更新或删除操作时表现出性能影响。
正确的密钥是什么意思?
为什么在对包元素执行更新或删除操作的情况下会对性能产生影响?
它们意味着基础数据库表上的主键。由于没有键,性能会受到影响,因此当键存在时需要表扫描而不是索引查找
假设您有一个实体父级,它有一个子级集合。在不使用列表中的索引列的情况下,Hibernate 将使用“Bag Semantics”来处理子项的集合。这意味着集合是无序的,并且可以包含重复项。如果您在删除孩子时查看 SQL 日志,您将看到一条删除语句删除所有孩子。后跟 # of children - 1 个插入,重新插入所有未删除的孩子。为什么不只是一个删除语句?
有关完整说明,请参阅此链接 (http://assarconsulting.blogspot.com/2009/08/why-hibernate-does-delete-all-then-re.html)。
显然,单个删除语句会更有效,对吧?在大多数情况下,我们实际上想要一个 Set,因为我们的实体通常是唯一的。但是,很多开发人员仍然使用 List(出于习惯)。默认情况下,对于没有索引列的列表,hibernate 将使用 Bag Semantics,性能较差。