2012-05-04 98 views
0

Iam在關閉會話後使用load方法加載學生對象iam試圖在hibernate 3.0中打印學生名稱。但我得到了LazyInitializationException:無法初始化代理 - 所屬Session關閉。我提到的一小段代碼片段關閉會話後,Retirve實體信息使用session.laod獲得異常

 Session session=HibernateUtil.currentSession(); 
    Transaction tx=session.beginTransaction(); 
    Object o1=session.load(Student.class,new Integer(2)); 
    tx.commit(); 
    session.close(); 
      log.info("Student name"+((Student)o1).getSname()); 

然後我又增加了lazy屬性=「真」。但同樣的錯誤有thrown.How來解決這個問題。

回答

1

這就是Session.load()方法的原理:它向實體返回一個非初始化代理(除非實體已經加載到會話中)。如果您想要初始化學生實例,請使用Session.get()

+0

ok.when我應該使用加載方法。 – user1357722

+0

當你只需要一個對現有實體的引用時很有用,例如將它附加到另一個實體上:'Product p = session.load(Product.class,productId); cart.add(P);' –