我读到在使用JPA时你应该为你的实体实现hashCode()/ equals()。 例如,Eclipse就有这个很好的功能来为类生成这些方法。
但我必须选择哪些领域? 我读到了选择Long id;您实体的领域不是一个好主意。 (对吧?,为什么?) 应该在hashCode()/ equals()方法中使用业务密钥(可用于标识实体的实体的某些字段。对吗?)。
考虑以下情况: 1:n与B之间的关系...... 在hashcode()方法中使用这些引用是一个好主意吗? 如果我这样做,我有时会遇到java.util.ConcurrentModificationException或Stackoverflow异常。 收集变量怎么样?我想我不应该在我的hashcode()函数中使用它们... 有人能给我提示吗?
答案 0 :(得分:0)
考虑使用唯一标识对象的字段(尽可能少)。如果它是一个人,它可能是第一个,中间名和姓。或者更好的是,美国人的社会保障号码。我没有看到使用数据库ID的任何问题,只要该表不能包含重复的实体。通常,对象的标识不应该要求检查它的关联对象的身份(1:n关系),而只需要检查本地字段。
答案 1 :(得分:0)
Equals和hashcode方法应始终在主键或业务键上实现,如果您想遵守持久管理器的要求,这是必要的。 Check here
答案 2 :(得分:0)
您可以在哈希码中实现自己的逻辑以获取唯一编号。例如
你可以做一些^ -ing的组合 (XOR-ing)一个类的实例变量(换句话说,将它们的位分开) 可能会将它们乘以素数。