相关实体的hashCode()方法

时间:2012-04-02 11:28:28

标签: java jpa hashcode entities

我读到在使用JPA时你应该为你的实体实现hashCode()/ equals()。 例如,Eclipse就有这个很好的功能来为类生成这些方法。

但我必须选择哪些领域? 我读到了选择Long id;您实体的领域不是一个好主意。 (对吧?,为什么?) 应该在hashCode()/ equals()方法中使用业务密钥(可用于标识实体的实体的某些字段。对吗?)。

考虑以下情况: 1:n与B之间的关系...... 在hashcode()方法中使用这些引用是一个好主意吗? 如果我这样做,我有时会遇到java.util.ConcurrentModificationException或Stackoverflow异常。 收集变量怎么样?我想我不应该在我的hashcode()函数中使用它们... 有人能给我提示吗?

3 个答案:

答案 0 :(得分:0)

考虑使用唯一标识对象的字段(尽可能少)。如果它是一个人,它可能是第一个,中间名和姓。或者更好的是,美国人的社会保障号码。我没有看到使用数据库ID的任何问题,只要该表不能包含重复的实体。通常,对象的标识不应该要求检查它的关联对象的身份(1:n关系),而只需要检查本地字段。

答案 1 :(得分:0)

Equals和hashcode方法应始终在主键或业务键上实现,如果您想遵守持久管理器的要求,这是必要的。 Check here

答案 2 :(得分:0)

您可以在哈希码中实现自己的逻辑以获取唯一编号。例如

你可以做一些^ -ing的组合 (XOR-ing)一个类的实例变量(换句话说,将它们的位分开) 可能会将它们乘以素数。