java - JPA 2 上的 List 与 Set - 优点/缺点/便利

标签 java mysql hibernate jpa

我已经尝试在 Stack Overflow 和其他网站上搜索使用 SetsLists 的优缺点和便利,但我真的找不到明确的答案何时使用这个或那个。

从 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/

相关文章:

mysql - 如何重复行?

php - 如何向用户显示已输入新评论

java - 没有用于带有 JavaSE 应用程序的 EntityManager 的持久性提供程序?

spring-boot - 如何知道 spring-boot 项目中使用了哪些版本的 hibernate/spring 数据?

java - 为什么我会收到并发线程错误

java - 在字节码中使用 BCEL 将方法添加到类中的特定行

java - JPA + SPRING=DAO。动态参数表

Java线程: Is using interrupt() within run() acceptable to stop a thread when it is finished completing its task?

mysql - 如何选择特定列与另一行的值不同的 SQL 行?

java - 是否可以在 hql 中使用 Between 、 current_date 和 subdate 函数?