1
我收集Hibernate使用javassist庫來處理對象的惰性初始化。說我有以下實體(getter/setter方法/註解是截斷):Eclipse調試器顯示Hibernate管理的對象未被懶惰初始化
@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檢索爲主,comp
對象尚未初始化由於延遲初始化。我希望調用Case A
後,comp
對象將從數據庫中檢索,但基於調試器,所有comp對象屬性顯示爲空。
只有在Case B
之後,我將name
值保存到localVariableName
中,我可以看到localVariableName獲得非空值。
爲什麼Eclipse將我的對象屬性顯示爲null?
這可能有助於http://www.javalobby.org/java/forums/t20533.html – xyz
您的診斷錯誤。 A和B是完全一樣的東西。不管你存儲結果還是不存儲在局部變量中都是無關緊要的。所以如果A不會拋出異常,B不會。由於一切都在事務性方法中,所以不應該有任何異常。 –
它實際上不會引發異常,但在案例A期間整個對象的屬性被初始化爲空。在案例B中,這是它們用來自數據庫的值填充的時間。我會更新這篇文章以清楚說明。 –