首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hibernate/JPA Parent-Child - Parent equals()/hashCode()是否可以使用DB Id?

Hibernate/JPA Parent-Child - Parent equals()/hashCode()是否可以使用DB Id?
EN

Stack Overflow用户
提问于 2009-05-27 18:12:43
回答 1查看 1.6K关注 0票数 3

假设有以下情况:

代码语言:javascript
复制
@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总是顶级对象(即它永远不是任何关联的反面),那么只使用id有什么错吗?

这样做有没有什么不必要的影响呢?我猜想如果我这样做,当我添加(或删除)一个子元素时,Hibernate将不能告诉你父元素已经改变(并且需要在数据库中更新)?在这种情况下,我是否应该为Parent.equals()和Parent.hashCode()使用子属性?

我之所以问这个问题,是因为Hibernate文档明确表示不要将@Id属性用于“自然键”……

EN

回答 1

Stack Overflow用户

发布于 2009-05-27 19:01:29

使用ID作为equals和hashCode基础的主要问题是未持久化的对象。这些对象可能都以相同的ID开头,这不能正确地进行相等比较。即使您从未将对象放入集合中,但如果它们通过API公开,而其他人可以创建它们的实例并将其放入集合中,那么您已经向一些讨厌的bug敞开了大门。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/917218

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档