Hibernate は javassist ライブラリを使用して、オブジェクトの遅延初期化を処理しているようです。次のエンティティがあるとします (ゲッター/セッター/注釈は切り捨てられます):
@Entity
public class MainEntity {
private ComponentEntity comp;
}
@Entity
public class ComponentEntity {
private Integer id;
private String name;
}
ここで、次のメソッドを呼び出します。
@Transactional
public void doSomething() {
MainEntity main = this.dao.find(1);
// Case A
main.getComp().getName();
// Case B
String localVariableName = main.getComp().getName();
}
DAO が main を取得するとき、comp
オブジェクトは遅延初期化のためにまだ初期化されていません。を呼び出した後Case A
、comp
オブジェクトはデータベースから取得されていると思いますが、デバッガーに基づいて、すべての comp オブジェクトのプロパティが null として表示されます。
localVariableName が null 以外の値を取得していることを確認できるのは、値をCase B
に保存した後でのみです。name
localVariableName
Eclipse でオブジェクトのプロパティが null として表示されるのはなぜですか?