public Fwxx select(Class c, int fwid){ Session session=HibernateSessionFactory.getSession(); Fwxx fwxx=(Fwxx)session.get(c,fwid); System.out.println(fwxx.getLxr()); HibernateSessionFactory.closeSession(); return fwxx; } 查詢完之后就關(guān)閉session,但是當(dāng)在action調(diào)用這個(gè)方法的時(shí)候就報(bào) could not initialize proxy - the owning Session was closed
2 回答

楊__羊羊
TA貢獻(xiàn)1943條經(jīng)驗(yàn) 獲得超7個(gè)贊
按照你的講法,感覺并不是在調(diào)用方法時(shí)拋異常,而是在調(diào)用方法后使用返回對(duì)象Fwss的屬性時(shí)拋的異常。
這是因?yàn)槟鉌wxx對(duì)象肯定還包含其他對(duì)象,而且還用了hibernate的遲加載,當(dāng)具體使用到這個(gè)對(duì)象時(shí)hibernate才會(huì)去數(shù)據(jù)庫里查,而這時(shí)你的session已經(jīng)關(guān)閉了,所以會(huì)拋異常。
比較傳統(tǒng)的解決辦法是加一個(gè)Filter,把開閉session的操作放在filter里面來保證在request的生命周期內(nèi)有一個(gè)活動(dòng)的session對(duì)象。
當(dāng)然還有其他實(shí)現(xiàn)方法,如aop,或在action里控制session等等,前一種比較普遍,后一種要寫許多代碼,而且還破壞了分層結(jié)構(gòu),所以不太推薦,不過在小規(guī)模的系統(tǒng)中還是比較有用的。
- 2 回答
- 0 關(guān)注
- 153 瀏覽
添加回答
舉報(bào)
0/150
提交
取消