我已经尝试在 Stack Overflow 和其他网站上搜索使用 Sets 与 Lists 的优缺点和便利,但我真的找不到明确的答案何时使用这个或那个。
从 Hibernate 的文档中,他们声明非重复记录应该进入 Sets,并且从那里,您应该为可以包装到的每个实体实现 hashCode() 和 equals()一个集合。但随后涉及到便利性和易用性的代价,因为有一些文章建议使用业务键作为每个实体的 id,从那里,hashCode() 和 equals() 可以在每种情况下完美实现无论对象的状态如何(托管、分离等)。
一切都很好,一切都很好......直到我遇到很多无法使用 Set 的情况,比如 Ordering(尽管 Hibernate 给了你 SortedSet), collectionObj.get(index), collectionObj.remove(int location || Object obj) 的便利性, Android 的 ListView/ExpandableListView (GroupIds, ChildIds) 架构等等... 我的观点是:< strong>Set 操作和使其 100% 工作真的很糟糕(恕我直言)。
我很想将项目的每个集合都更改为 List,因为它们运行良好。我所有实体的 ID 都是通过 MYSQL 的自动生成序列生成的 (@GeneratedValue(strategy = GenerationType.IDENTITY)
)。
在上面提到的所有这些小细节中,有没有人能以明确的方式让我头脑清醒?
此外,是否可以将 Eclipse 自动生成的 hashCode() 和 equals() 用于每个实体的 ID 字段?它在任何情况下都有效吗?
非常感谢,
雷纳托
最佳答案
List versus Set
允许重复 列表允许重复,集合不允许重复。对于某些人来说,这将是他们选择 List 或 Set 的主要原因。
Multiple Bag's Exception - 同一查询中的多个 Eager fetching 处理 Hibernate 的一个显着区别是您不能在单个查询中获取两个不同的列表。 它将抛出异常“无法获取多个包”。但是对于集合,没有这样的问题。
关于java - JPA 2 上的 List 与 Set - 优点/缺点/便利,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25451250/