我在寻找大多数人在Hibernate中建立一对多关联时用作其收藏类型。我正在维护的旧版应用程序仅使用bag,但将其作为代码列表保留。关联的表具有id字段,因此idbag似乎更合适,但是文档建议使用Set。
编辑:我错误地引用了文档建议一套。实际上,官方文档在所有馆藏类型上都含糊不清。我发现有些 网站似乎在推断Set是最常见的,而我正在阅读的Hibernate书明确说明了有关set的内容:
这是典型的Hibernate应用程序中最常见的持久性集合。(请参阅:Christian Bauer和Gavin King撰写的“ Java Persistence with Hibernate”的第242页)
我想这就是让我发疯的原因,并促使我找出其他人正在使用的东西。
EDIT2:请注意,Gavin King是Hibernate的创建者
好的,一段时间后,我发现了不使用Set作为集合类型的原因。由于hashcode / equals覆盖问题以及hibernate方式持续存在,使用任何调用hashcode / equals的Java API功能都是一个坏主意。没有很好的方法来持续比较对象的持久性和持久性。坚持使用不依赖equals / hashcode的集合,例如bag。
bag
更多信息在这里:
http://community.jboss.org/wiki/EqualsandHashCode(此链接听起来像是要解决的业务关键,但是请仔细阅读下一个链接以了解为什么这并不总是一个好主意)
https://forum.hibernate.org/viewtopic.php?f=1&t=928172(请阅读整个讨论以使您的头脑旋转)