僅為個(gè)人理解.請(qǐng)指正
Hibernate Session, 其作用無(wú)需多言.
在運(yùn)用中為避免資源消耗,一般都會(huì)手動(dòng)封裝一個(gè)HibernateUtil類(未使用Spring管理的前提下).
該類的作用使Hibernate加載配置文件config, 創(chuàng)建sessionFactory等只運(yùn)行一次.
實(shí)際運(yùn)用中,經(jīng)常需要將當(dāng)前線程和session綁定.一般的用法為使用ThreadLocal: 在HibernateUtil類中封裝hibernate的管理.通過(guò)openSession取得
session,并將其放入ThreadLocal變量中. 這樣業(yè)務(wù)邏輯中僅需通過(guò)工具類取得當(dāng)前線程對(duì)應(yīng)的session.使用完畢后,調(diào)用工具類closeSession方法將
session關(guān)閉,當(dāng)前線程的ThreadLocal變量置為NULL. 保證線程歸還線程池復(fù)用后,ThreadLocal為空,以免出現(xiàn)導(dǎo)致其他線程訪問(wèn)到本線程變量.
而后,Hibernate的SessionFactory提供獲取session的新方法getCurrentSession (獲得與當(dāng)前線程綁定的session). 內(nèi)部通過(guò)代理封裝,此方式得到的session
不僅和當(dāng)前線程綁定,也無(wú)需手動(dòng)開(kāi)關(guān). 默認(rèn)在事務(wù)提交之后,session自動(dòng)關(guān)閉. 需注意的是,必須在事務(wù)開(kāi)啟的前提之下才可使用此種方式獲得的session.
此外hibernate.cfg.xml配置文件中也許配置
------------------------------以下內(nèi)容為工地資料-------------------------------------------------------------------------------
1 OpenSession : 手動(dòng)打開(kāi),需手動(dòng)關(guān)閉.[所以代碼中充斥著try catch --sf.openSession --打開(kāi)事務(wù),提交-回滾 finall關(guān)閉session的代碼]
以下為T(mén)hreadLocal的參考資料Hibernate Session, 其作用無(wú)需多言.
在運(yùn)用中為避免資源消耗,一般都會(huì)手動(dòng)封裝一個(gè)HibernateUtil類(未使用Spring管理的前提下).
該類的作用使Hibernate加載配置文件config, 創(chuàng)建sessionFactory等只運(yùn)行一次.
實(shí)際運(yùn)用中,經(jīng)常需要將當(dāng)前線程和session綁定.一般的用法為使用ThreadLocal: 在HibernateUtil類中封裝hibernate的管理.通過(guò)openSession取得
session,并將其放入ThreadLocal變量中. 這樣業(yè)務(wù)邏輯中僅需通過(guò)工具類取得當(dāng)前線程對(duì)應(yīng)的session.使用完畢后,調(diào)用工具類closeSession方法將
session關(guān)閉,當(dāng)前線程的ThreadLocal變量置為NULL. 保證線程歸還線程池復(fù)用后,ThreadLocal為空,以免出現(xiàn)導(dǎo)致其他線程訪問(wèn)到本線程變量.
而后,Hibernate的SessionFactory提供獲取session的新方法getCurrentSession (獲得與當(dāng)前線程綁定的session). 內(nèi)部通過(guò)代理封裝,此方式得到的session
不僅和當(dāng)前線程綁定,也無(wú)需手動(dòng)開(kāi)關(guān). 默認(rèn)在事務(wù)提交之后,session自動(dòng)關(guān)閉. 需注意的是,必須在事務(wù)開(kāi)啟的前提之下才可使用此種方式獲得的session.
此外hibernate.cfg.xml配置文件中也許配置
<property name="current_session_context_class">thread</property> 基于線程
末了,引入Spring之后.sessionfactory的創(chuàng)建等都交給spring管理.Spring也提供了HibernateTemplate,HibernateDaoSupport這樣的封裝方法.
用戶可以不再考慮session的管理,事務(wù)的開(kāi)啟關(guān)閉.只需配置事務(wù)即可.
而所謂session關(guān)閉后,因延遲加載導(dǎo)致前臺(tái)無(wú)法顯示的問(wèn)題以往解決方式為強(qiáng)制全部加載,現(xiàn)在也可通過(guò)在web.xml中配置
末了,引入Spring之后.sessionfactory的創(chuàng)建等都交給spring管理.Spring也提供了HibernateTemplate,HibernateDaoSupport這樣的封裝方法.
用戶可以不再考慮session的管理,事務(wù)的開(kāi)啟關(guān)閉.只需配置事務(wù)即可.
而所謂session關(guān)閉后,因延遲加載導(dǎo)致前臺(tái)無(wú)法顯示的問(wèn)題以往解決方式為強(qiáng)制全部加載,現(xiàn)在也可通過(guò)在web.xml中配置
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter來(lái)解決.
------------------------------以下內(nèi)容為工地資料-------------------------------------------------------------------------------
1 OpenSession : 手動(dòng)打開(kāi),需手動(dòng)關(guān)閉.[所以代碼中充斥著try catch --sf.openSession --打開(kāi)事務(wù),提交-回滾 finall關(guān)閉session的代碼]
2 threadlocal : hibernate給出的提示. 在HibernateUtil工具類中,new出threadlocal ,放入opensession.這樣可以使當(dāng)前線程綁定session.
使用后需關(guān)閉session,將threadlocal中session變量置為null .
3 getCurrentSession: hibernate3的新特性. 無(wú)需手動(dòng)關(guān)閉session,自動(dòng)獲取當(dāng)前線程的session,若無(wú)則新建之. 需在配置文件中配置thread屬性.表明和當(dāng)前線程綁定.
參考網(wǎng)友資料,getCurrentSession模式,內(nèi)部開(kāi)啟了session自動(dòng)提交的功能且使用getCurrentSession的session,及時(shí)做load操作,也需要打開(kāi)事務(wù).
使用后需關(guān)閉session,將threadlocal中session變量置為null .
3 getCurrentSession: hibernate3的新特性. 無(wú)需手動(dòng)關(guān)閉session,自動(dòng)獲取當(dāng)前線程的session,若無(wú)則新建之. 需在配置文件中配置thread屬性.表明和當(dāng)前線程綁定.
參考網(wǎng)友資料,getCurrentSession模式,內(nèi)部開(kāi)啟了session自動(dòng)提交的功能且使用getCurrentSession的session,及時(shí)做load操作,也需要打開(kāi)事務(wù).