应该嵌入jpa类实现equals和hashCode吗?

问题描述:

比方说,我有以下情形:应该嵌入jpa类实现equals和hashCode吗?

@Entity 
public class Person { 
    @Id 
    private Long id; //Surrogate key 

    @Embedded 
    private Name name; //Natural key 

    public int hashCode() { 
     ... //based on natural key Name 
    } 
    public boolean equals(Object obj) { 
     ... //based on natural key Name 
    } 
} 

@Embeddable 
public class Name { 
    private String firstName; 
    private String middleName; 
    private String lastName; 

    //Should I implement equals/hashCode baseed on the three fields? 
} 

应该命名类实现顺序名称类的equals和hashCode是人正常工作相等?

对于将用作EmbeddedId的Embeddable对象是必须的。但在这个例子中,我使用了代理键。

+0

你确定“名字”会是真正独一无二的吗?不难想象两个人有相同名字的情况。 – 2011-01-21 18:54:50

我不相信JPA曾经要求你实现equals和hashcode。 Hibernate已经习惯了,但最近对这些文档的回顾表明,这不再是一项要求。

但是当然,实现散列码和等号总是个好主意。