調(diào)用hibernate的session的問題getCurrentSession 與 openSession() 的區(qū)別
該項(xiàng)目設(shè)計(jì)為 一個(gè) item 下有多個(gè) question ,而一個(gè)question 下有多個(gè) answer 。因此,需多次循環(huán)查詢數(shù)據(jù)庫。
測試時(shí),數(shù)據(jù)庫連接池的最大數(shù)及最小數(shù)都設(shè)為 1.
測試發(fā)現(xiàn),為getHibernateTemplate().getSessionFactory().openSession()時(shí),web 頁面無法正常顯示(白板),此時(shí)別的業(yè)務(wù)邏輯如果需要連接數(shù)據(jù)庫則都不能執(zhí)行;查詢 log4j 日志發(fā)現(xiàn),沒有打印出openSession()所在方法的sql。 后來改為 getHibernateTemplate().getSessionFactory().getCurrentSession()則web 頁面顯示正常。
getCurrentSession () 使用當(dāng)前的session
openSession() 重新建立一個(gè)新的session
在一個(gè)應(yīng)用程序中,如果DAO 層使用Spring 的hibernate 模板,通過Spring 來控制session 的生命周期,則首選getCurrentSession ()。