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

时间:2011-01-21 18:46:07

标签: java jpa persistence

假设我有以下情况:

@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?
}

Name类是否应该在Name类上实现equals和hashCode以使Person等于正常工作?

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

1 个答案:

答案 0 :(得分:4)

我不相信JPA要求你实现equals和hashcode。 Hibernate曾经使用过,但是最近对文档的评论表明这不再是必需的。

但当然,实现hashcode和equals总是一个好主意。