Должен ли встраиваемый 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.