我想在我的Web應用程序中使用Spring + Hibernate。 我的應用程序沒有使用Spring編寫。 當「打開頁面」操作被調用時,我打開Hibernate Session,將它存儲在Http Session中並在我的DAO之間共享。當保存操作被調用時,我使用舊會話開始事務。春季休眠 - 共享會話DAOs
但現在我想將我的舊DAO遷移到基於HibernateDaoSupport的DAO。 在這種情況下,我該如何分享會話?如果我的DAO引用beans.xml中的一個SessionFactory,它們將共享相同的會話嗎? 如何在這種情況下管理會話(打開新的或使用舊的)?
我寫了下面的代碼,但我得到
org.hibernate.LazyInitializationException:無法初始化代理 - 沒有會話
頁上的System.out.println(obj.getCategory()的getName( ));
public class CategoryObjectDAOSpringImpl extends HibernateDaoSupport implements CategoryObjectDAO {
@Override
public CategoryObject get(int id) throws Exception {
CategoryObject obj = getHibernateTemplate().get(CategoryObject.class, id);
System.out.println(obj.getId());
System.out.println(obj.getCategory().getName());
for (ObjAttrCommon objAttr : obj.getAttributes()) {
//objAttr.setSession(getSession());
System.out.println(objAttr.getId());
}
return obj;
}
奇怪的是,如果我添加
getSessionFactory().openSession();
呼叫頂部我有同樣的exeption。
如果我這樣做,我得到LazyInitializationException。會議和交易似乎已經完成後關閉。 – sanek
在服務層/ DAO層中執行Hibernate查詢時,或者在視圖(JSP/JSF)中訪問對象時,會顯示lazyinitializationException? – kothvandir
我編輯了我的反應,解釋瞭如何解決視圖會話問題。 – kothvandir