Должен ли встраиваемый 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 в классе Name для того, чтобы Лицо правильно работало?

Для объекта Embeddable, который будет использоваться как EmbeddedId, обязательно. Но в этом примере я использую суррогатный ключ.

Ответ 1

Я не считаю, что JPA всегда требует, чтобы вы использовали equals и hashcode. Hibernate раньше, но недавний обзор документов показывает, что это уже не является обязательным требованием.

Но, конечно, всегда полезно реализовать hashcode и equals.