有关stackoverflow的许多问题都涉及在Hibernate实体中使用List
vs Set
。我的问题略有不同(或者可能相同,但我还无法理解)。
如果我阅读了Hibernate文档,他们建议Set
使用Quoting from above documentation link:
You have to override the equals() and hashCode() methods if you:
- intend to put instances of persistent classes in a Set (the recommended way to represent many-valued associations);
- and intend to use reattachment of detached instances
进行多值关联http://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html_single/#persistent-classes-equalshashcode。
Set
直到Hibernate 4.3。但在以后的版本中,我再也看不到这句话了(http://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/Hibernate_User_Guide.html#mapping-model-pojo-equalshashcode)
所以我的问题是
List
代替String.getBytes()
? 谢谢!
答案 0 :(得分:1)
很好地回答你的第一个问题:
为什么Hibernate建议使用Set而不是List直到Hibernate 4?
首先,我将指出List
和Set
之间的主要区别:
List
是有序集合,而Set
则不是,但请注意,虽然List
是有序集合,但如果未指定索引列,则不会对其进行排序你的对象。Set
在List
期间不允许重复。第二点是解释在Set
上使用List
的建议,即使是Hibernate documentation itself says that lists and bags are more efficient than sets。
事实上,在双向关系中使用List
的问题是,在合并操作时在父关联上调用它会插入重复的子项,这似乎是{{3您可以在以下网址上阅读有关此问题的更多信息:
a bug in older Hibernate versions
回答你的第二个问题:
由于我在Hibernate 5中没有看到这个建议,这是否意味着它不再有效了?
我们无法对此进行演绎,但我认为Hibernate 5修正了这个错误,这就是为什么我们不再看到这个推荐,但它只是一个假设