Gre*_*nie 3 java hibernate jpa java-ee
鉴于以下内容:
@Entity
public class Parent implements Serializable {
@Id
private Long id;
// mapped ManyToOne below...
private List<Child> children = new ArrayList<Child>();
...
}
Run Code Online (Sandbox Code Playgroud)
让Parent.equals()和Parent.hashCode()仅使用id是不好的做法?我知道Child.equals()和Child.hashCode()应该为"自然键"使用一组不可变的属性,以便它们由Parent正确管理.但是,如果Parent始终是顶级对象(即它永远不是任何关联的反面),那么仅使用id是否有任何问题?
通过这样做,是否有任何可能表现出来的不良影响?我猜也许如果我这样做,当我添加一个子(或删除)时,Hibernate将无法告诉父更改(并且需要在DB中更新)?在这种情况下,我应该使用Parent.equals()和Parent.hashCode()的children属性吗?
我问,因为Hibernate docs明确表示不要将@Id属性用于"自然键"......
使用ID作为equals和hashCode基础的主要问题是未被包含的对象.这些对象可能都是以相同的ID开头的,因此无法正确比较这些对象.即使您从未将对象放入集合中,如果它们通过API公开,而其他人可以创建它们的实例并将它们放入集合中,那么您已经将自己打开了一些令人讨厌的错误.
归档时间: |
|
查看次数: |
1476 次 |
最近记录: |