[英]Loading many-to-one class - Hibernate
我想從數據庫中加載House
對象,如下所示:
House temp = DataBaseConnector.getInstance().findHouseByID(id);
System.out.println(temp.getType().getName());
但是任何時候我嘗試訪問getType()
字段都會出現錯誤:
線程“ AWT-EventQueue-0”中的異常org.hibernate.LazyInitializationException:無法初始化代理-org.hibernate.proxy.AbstractLazyInitializer.getImplementationation上的org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:165)上沒有會話(org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:185)處的AbstractLazyInitializer.java:286),位於mapping.Type _ $$ _ jvstd13_0.getName(Type _ $$$ _ jvstd13_0.java)處。
findHouseById
函數如下所示:
public static House findHouseByID(Integer id) {
Session session = getSessionFactory().openSession();
House e = (House) session.load(House.class, id);
session.close();
return e;
}
任何幫助,將不勝感激 :)
如異常所示,您在調用temp.getType()
沒有會話(休眠),因為在將對象加載到findHouseByID
方法中后關閉了會話。
這里有一些關於對象狀態的信息:
https://docs.jboss.org/hibernate/core/3.3/reference/zh/html/objectstate.html
由於這個事實,您將獲得LazyInitializationException
因為休眠試圖訪問數據庫以在分離對象上傳播未初始化的字段type
。
您可以將字段type
的獲取策略更改為EAGER
因此此時不需要數據庫訪問,請在此處查看:
https://docs.jboss.org/hibernate/jpa/2.1/api/javax/persistence/FetchType.html
或者,您必須增加會話的范圍(在關閉會話之前調用getType
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.