2012-04-02 9 views
0

JPAを使用するときは、エンティティに対してhashCode()/ equals()を実装する必要があります。 Eclipseには、クラスのメソッドを生成するための優れた機能があります。関連するエンティティのhashCode()メソッド

しかし、どのフィールドを選択する必要がありますか? 私はそれを読んで長いIDを選択します。あなたのエンティティのフィールドは良い考えではありません。 (right ?, why?) hashCode()/ equals()メソッドのビジネスキー(エンティティを識別するために使用できるエンティティのいくつかのフィールド)を使用する必要があります。

AとBの1:nの関係... hashcode()メソッドでこれらの参照を使用することをお勧めしますか? 私はそうすることがありますが、時々java.util.ConcurrentModificationExceptionまたはStackoverflow例外が発生します。 コレクション変数はどうですか?私は私のhashcode()関数でそれらを使用すべきではないと思う... 誰かが私にヒントを与えることができますか?

答えて

0

オブジェクトを一意に識別するフィールドを(可能な限り)使用することを検討してください。それが人であれば、それは第一、中間、そして姓であるかもしれません。または、米国人なら社会保障番号。テーブルに重複したエンティティが含まれていない限り、DB IDの使用に関する問題はありません。一般に、オブジェクトのアイデンティティは、関連するオブジェクト(1対n関係)のアイデンティティをチェックする必要はなく、ローカルフィールドだけをチェックする必要があります。

+0

ありがとうございます:)私はそれを理解しているので、オブジェクトが作成されたとき(データベースに保持されていないとき)にこのフィールドがnullになるため、idプライマリキーを使用すべきではありません。したがって、新しいオブジェクトはすべて別の新しいオブジェクトと同じになります。問題は、自分のエンティティにユニークであると考えられる代替フィールドがない場合はどうなりますか? ID以外のフィールドを使用する必要がありますか? – Moonlit

+0

抽象的には、2つのオブジェクトがどのように等しくなると思いますか?つまり、DBを使用していないのでIDがない場合、2つのBeanの等価性をどのように定義しますか?すべてのフィールドをチェックするだけですか?何が起こっているのかをよりよく理解できるように、あなたの質問にオブジェクトの構造を投稿する必要があるかもしれないようです。 –

0

等価メソッドとハッシュコードメソッドは、常に主キーまたはビジネスキーのどちらかに実装する必要があります。これは、永続マネージャの要件を遵守する場合に必要です。 Check here

0

あなたは^のいくつかの組み合わせを行うことができます

ユニークnumber.For例-ingを取得するにはハッシュコードに独自のロジックを実装することができます (XOR-INGの)、他の言葉で(クラスのインスタンス変数をいじりますそのビットには に沿って、おそらく素数でそれらを掛けます。

関連する問題