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