在Hibernate中进行一对多关联时,我正在寻找大多数人用作收集类型的东西.我维护的遗留应用程序专门使用行李,但将它们保存为代码中的列表.相关的表有一个id字段,所以idbag似乎更合适,但文档推荐一个Set.
编辑:我错误地引用了文档推荐的集合.实际上,官方文档对所有集合类型同样含糊不清.我发现有些 网站似乎推断Set是最常见的,我正在阅读的Hibernate书明确说明了这些集:
这是典型Hibernate应用程序中最常见的持久性集合.(参见:Christian Bauer和Gavin King撰写的'Java Persistence with Hibernate'第242页)
我猜这就是扔给我的东西,让我找到别人正在使用的东西.
EDIT2:请注意,Gavin King是Hibernate的创建者
Coo*_*ino 12
根据使用两者的经验,我建议使用List.如果要从数据库中获取数据并显示/操作它,那么它几乎总是需要保持一致的顺序.您可以使用SortedSet,但与仅添加订单并将其存储在List中相比,它可以添加整个世界的痛苦(覆盖equals,hashcode等以及以不同方式排序).列表更易于操作 - 如果用户删除页面上的第3行,则只需删除列表中的第3项.使用Set似乎涉及许多不必要的代码并且使用迭代器搞乱.
当我使用带有Hibernate的Sets时,我经常发现自己在几周之后将所有套件翻录并用Lists替换,因为套件给了我太多限制.
Hibernate文档和第三方工具似乎默认使用Sets,但是从硬体验中我发现使用Lists的效率更高.
好的,经过一段时间后,我发现了一个不使用Set作为集合类型的理由.由于hashcode/equals覆盖问题以及hibernate持续存在的方式,使用任何调用hashcode/equals的java API函数都是一个坏主意.没有好的方法可以持续比较持久性前后的对象.坚持使用不依赖于equals/hashcode的集合bag.
更多信息:
http://community.jboss.org/wiki/EqualsandHashCode(这个链接让它看起来像是一个商业密钥,但是要完全阅读下一个链接,看看为什么这并不总是一个好主意)
https://forum.hibernate.org/viewtopic.php?f=1&t=928172(阅读整个讨论,让你的头脑旋转)
| 归档时间: |
|
| 查看次数: |
20346 次 |
| 最近记录: |