興味のあるフィールド/属性を選択することによって、JPAエンティティのhashcode()
およびequals()
メソッドを生成するためにEclipseを使用しました。JPAエンティティのequals()メソッドの正しい実装方法
しかし、私が観察しているEclipseが生成さequals
メソッド内の行の下に追加しているようだということ:
if (getClass() != obj.getClass())
return false;
上記のチェックを持っている論理的なようだが、私はすべての私のJPAエンティティでLAZYロードされた関係を使用しています、ある特定の例では、obj
のクラスが何らかの種類のプロキシされたクラスであり、主なオブジェクトが問題のエンティティである場合にチェックが失敗することがわかりました。 - 私は比較対象のクラスを検査しています。オブジェクトがデータベースから同じレコードを表したとしても、上記の条件はfalse
と評価されます。
私は、JPAエンティティのためにequals()
メソッドを実装する際に、オブジェクトのクラスを比較する必要があります。
通常、このチェックは、ClassCastExceptionを防止するためのものです。プロキシクラスとメインエンティティクラスの両方にキャストする共通の親がありますか? – 4castle
私は 'Student'クラスのインスタンスを' Student'クラスのインスタンスのコレクションと比較しようとします。最初のインスタンスはDBから読み込まれますが、コレクションは他のエンティティへの子関係の一部であるため、遅く初期化されます。例えば、 'College' –
それは本当に私の質問に答えるものではありません。あなたのコードは 'if'ステートメントなしで実行できますか?もしそうなら、あなたはもっと寛大で、 'getClass()'を比較する代わりに 'instanceof'チェックを使用することができます。 – 4castle