考虑以下几点:Hibernate/JPA Parent-Child - Parent equals()/ hashCode()可以使用数据库ID吗?
@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始终是顶级对象(即,它永远不是任何关联的反面),使用唯一标识符有什么问题吗?
是否有任何不必要的影响可以通过这样做表现出来?我猜测,也许如果我这样做,当我添加一个孩子(或删除),Hibernate将无法告诉父已经改变(并需要在数据库中更新)?在这种情况下,我应该使用Parent.equals()和Parent.hashCode()的children属性吗?
我问,因为在Hibernate文档明确地说,不使用@Id属性“自然键” ......
我明白你在说什么,但是从技术上讲,如果id是零,那么他们确实是相等的:他们都是未被执行的父对象。对于只有这两个属性(id和children)的上述示例,您如何建议实现equals()和hashCode()?我需要引入更多的属性吗? – GreenieMeanie 2009-05-27 19:08:22