Lo reconocen exactamente método .equals () en el supuesto de: instancia del objeto o estado del objeto?
Estoy aprendiendo Hibernate y JPA. Cuando quiero usar asociación OneToMany bidireccional hay un problema porque cuando anular método igual y HashCode con todas las variables se convierten en bucle infinito. La única manera de resolver el problema que veo es no utilizar en uno de la clase de la otra instancia de clase en equals () y hashCode (). Así que estoy considerando si es compatible con los supuestos en Java para .equals () método.
Por ejemplo, tenemos una clase Persona (). Yo sé que el correo electrónico es un valor único. Así que se puede comparar persona por correo electrónico y entonces sé que se trata de la misma persona (ejemplo), pero no sé si el estado del objeto es el mismo (campos Nombre y Apellidos pueden diferir). Por lo tanto, es mi pregunta, ¿qué debemos esperar durante Comparar con objeto .equals ()?
@Entity
public class Person {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String email="";
private String firstName = "";
private String lastName = "";
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Person)) return false;
Person person = (Person) o;
return email.equals(person.email);
}
@Override
public int hashCode() {
return Objects.hash(email);
}
}
Cuando pienso en la implementación equals
de una clase dada Me hago una pregunta: ¿qué hace que un objeto sea único? Lo que difiere instancia de uno Person
diferente de otro? Luego uso que las propiedades de la ejecución equals
. En su caso, o en el caso de @Entity
los objetos con @XtoY
relación, en mi opinión, no hay necesidad de incluir esta relación equals
.
Si, por ejemplo, tengo una Person
que tiene una relación con Department
el hecho de que una persona pertenece a algunos departamentos no hace que su único. Es su nombre / apellido / PESEL o correo electrónico y así sucesivamente, y eso es lo que me gustaría incluir en equals
.
Espero que esto ayude.