私はJava 8とSpring Data JPAをHibernateで使用しています。私は奇妙な行動を観察している。JPA - 遅延ロードされたエンティティ参照にフィールドがありますnull
すべてのエンティティリレーションシップはLAZYです。
Course toBeMatched = //...a repository call to get a course...;
for (Student s : college.getStudents()) {
if (s.getCourse().equals(toBeMatched)) {
found = true;
}
}
私equals()
方法は、本物のケースのためにもfalse
を返します。 Course#equals
の実装は多少これらの線に沿っている:
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
Course other = (Course) obj;
if (shortName == null) {
if (other.shortName != null)
return false;
} else if (!shortName.equals(other.shortName))
return false;
return true;
}
問題:私はother.getShortName()
を使用する場合other.shortName
は常にnull
あるようが 私の問題は、誤ってshortName.equals(other.shortName)
失敗したということですが、しかし、私は正しく値を取得します。
私の質問は、ゲッターメソッドを実行する代わりに、遅延ロードされたエンティティのフィールドにアクセスすることによって、何か根本的に間違っているかどうかです。
これは、バイトコード拡張の代わりにプロキシを使用することで、Hibernateを使用するときに得られるものです。そのため、使用状況を検出できないため、レイジーローディングフィールドについてはわかりません。バイトコードの拡張機能をオンにするか、そのままの形でJPAプロバイダを使用する –