【发布时间】:2014-10-16 13:23:03
【问题描述】:
我曾尝试在 Stack Overflow 和其他网站上搜索使用 Sets 与 Lists 的优缺点和便利,但我真的找不到明确的答案什么时候用这个或那个。
从 Hibernate 的文档中,他们声明不重复的记录应该进入 Sets 并且从那里,您应该为每个可以包装的单个实体实现 hashCode() 和 equals() 设置。但随之而来的是便利性和易用性的代价,因为有一些文章建议使用业务密钥作为每个实体的 id,从那里,hashCode() 和 equals() 可以在每种情况下完美实现无论对象的状态如何(托管、分离等)。
一切都很好,一切都很好......直到我遇到很多使用 Sets 不可行的情况,例如 Ordering(尽管 Hibernate 给了你 的想法>SortedSet)、collectionObj.get(index)、collectionObj.remove(int location || Object obj)的便利性、Android的ListView/ExpandableListView(GroupIds, ChildIds)等架构...我的观点是:Sets 操作起来真的很糟糕(恕我直言)并使其 100% 发挥作用。
我很想将我项目的每个集合都更改为 List,因为它们运行良好。我所有实体的 ID 都是通过 MYSQL 的自动生成序列 (@GeneratedValue(strategy = GenerationType.IDENTITY)) 生成的。
在上面提到的所有这些小细节中,有没有人可以明确地清除我的想法?
另外,对每个实体的 ID 字段使用 Eclipse 自动生成的 hashCode() 和 equals() 是否可行?它在任何情况下都有效吗?
非常感谢,
雷纳托
【问题讨论】:
-
列出.v。 Set 与 JPA2 关系不大。它是关于您在应用程序中需要什么。 JPA2 处理两者
-
ID 在大多数情况下不是业务密钥,而是合成密钥。所以你最后一个问题的答案是否定的,因为这样做是完全错误的。 Neil 已经回答了 List v Set。