【发布时间】:2023-03-18 00:08:02
【问题描述】:
鉴于以下情况:
@Entity
public class Parent implements Serializable {
@Id
private Long id;
// mapped ManyToOne below...
private List<Child> children = new ArrayList<Child>();
...
}
让 Parent.equals() 和 Parent.hashCode() 只使用 id 是不是一种不好的做法?我知道 Child.equals() 和 Child.hashCode() 应该使用一组不可变的属性作为“自然键”,以便它们由 Parent 正确管理。但是,如果 Parent 始终是顶级对象(即它永远不是任何关联的反面),那么仅使用 id 有什么问题吗?
是否有任何不良影响可以通过这样做来表现出来?我猜也许如果我这样做,当我添加一个孩子(或删除)时,Hibernate 将无法告诉 Parent 已经改变(并且需要在 DB 中更新)?在这种情况下,我应该为 Parent.equals() 和 Parent.hashCode() 使用 children 属性吗?
我之所以问是因为 Hibernate 文档明确表示不要将 @Id 属性用于“自然键”...
【问题讨论】:
标签: java hibernate jpa jakarta-ee