簡體   English   中英

加載多對一課程-Hibernate

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM