正確には何の仮定に.equals()メソッドを認識します。オブジェクトのインスタンスやオブジェクトの状態は?
私は、HibernateやJPAを学んでいます。私は双方向OneToManyの関連付けを使用したい場合は、私はすべての変数と等しいとhashCodeメソッドをオーバーライドするとき無限ループがなっているので、問題があります。私が見る問題を解決する唯一の方法は、(対等にクラスのいずれかで他のクラスのインスタンスを使用しないことです)とhashCode()。だから私はそれが.equalsのためにJavaで仮定()メソッドと互換性があるかどうか検討しています。
例えば、我々はPersonクラスを持っています()。私は、電子メールが一意の値であることを知っています。私は電子メールで人を比較することができ、その後、私はそれが同じ人(インスタンス)であることを知っているが、私は、オブジェクトの状態が同じであれば知らないので(姓と名のフィールドが異なる場合があります)。それは私の質問ですので、我々は.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);
}
}
私は実装を考えた場合equals
、オブジェクトがユニークなもの:指定されたクラスのために私は自分自身に質問をしますか?何が1つの場合と異なるPerson
他と異なるの?それから私は実現するために、そのプロパティを使用しますequals
。あなたのケースでは、またはの場合@Entity
とオブジェクト@XtoY
の関係、私の意見ではこの関係を含める必要はありませんequals
。
例えば、私が持っている場合Person
に関係を持っていることをDepartment
、人はいくつかの部門に属しているという事実は、彼がユニークなことはありません。それは彼の名/姓/ PESELまたは電子メールだというように、それは私が含まれるであろうものですequals
。
お役に立てれば。