5

hashcode()equals()の永続エンティティをオーバーライドするとき、IDを含めるべきではなく、オブジェクトを一意に識別する意味のあるプロパティ。 しかし、オプティミスティックな並行性制御のために使用されるversionフィールドについては、によってHibernateが使用されますか? IDと同じようにスキップする必要がありますか? new User(name='John', version=1).equals(new User(name='John',version=2))と言うと、どうにかHibernate OCCを混乱させないでしょうか?Hibernate:hashcode()とequals()メソッドに 'version'フィールドを含めるべきです

答えて

3

ビジネスキーの等価性を使用してequals()およびhashCode()を実装することをお勧めします。ビジネスキーの等価性は、equals()メソッドがビジネスキーを構成するプロパティのみを比較することを意味します。それは、現実の世界で私たちのインスタンスを識別するキー(自然候補キー)

あるので、あなたがないequals()hashcode()

にバージョンプロパティを含める必要があります参照してください。http://docs.jboss.org/hibernate/core/3.3/reference/en/html/persistent-classes.html#persistent-classes-equalshashcode

+0

をええ、私は」それを読んでください。しかし、 'version'フィールドはそこには言及されていないので、その目的(異なる値は異なるオブジェクトを意味する)を考慮に入れて、私は疑いました。しかし、Hibernateはアプリケーション内の他のものに 'version'を使わないことを勧めます。だから私はもっとそれについて考えるほど、 'バージョン'は 'equals()'と 'hashcode()'に含まれてはならないと確信します。 – wajda

関連する問題