Hibernate Session實(shí)例剖析
在向大家詳細(xì)介紹Session之前,首先讓大家了解下如何獲得Session對(duì)象,然后全面介紹Hibernate Session實(shí)例。
Session(org.hibernate.Session)
(1) 單線程的,短壽命的對(duì)象,代表了一次會(huì)話的過(guò)程。實(shí)際上是把一個(gè)JDBC Connection打包了,它可以包含一些持久化對(duì)象的緩存看作介于數(shù)據(jù)連接與事物管理一種中間接口.
在Hibernate的設(shè)計(jì)者中.他們將session看作介于數(shù)據(jù)連接與事物管理的一種中間接口或者想象成一個(gè)持久對(duì)象的緩沖區(qū)hibernate能檢測(cè)到這些持久對(duì)象的改變,并及時(shí)刷新數(shù)據(jù)庫(kù)
(2) 每一個(gè)Hibernate Session實(shí)例和一個(gè)數(shù)據(jù)庫(kù)事務(wù)綁定通常將每一個(gè)Hibernate Session實(shí)例和一個(gè)數(shù)據(jù)處理庫(kù)事務(wù)綁定就是說(shuō),每執(zhí)行一個(gè)數(shù)據(jù)庫(kù)事務(wù)(操作),都應(yīng)該先創(chuàng)建一個(gè)新的Hibernate Session實(shí)例.
如果事務(wù)執(zhí)行中出現(xiàn)異常,應(yīng)該撤消事務(wù).不論事務(wù)執(zhí)行成功與否,最后都應(yīng)該調(diào)用Session的close()方法,從而釋放Hibernate Session實(shí)例占用的資源.
(3) 如何獲得Session對(duì)象
首先創(chuàng)建SessionFactory對(duì)象應(yīng)用服務(wù)器如果訪問(wèn)多個(gè)數(shù)據(jù)源時(shí),則應(yīng)該產(chǎn)生多個(gè)SessionFactory;
但是僅僅為了服務(wù)與某個(gè)請(qǐng)求時(shí),不要?jiǎng)?chuàng)建一個(gè)新的SessionFactory,因?yàn)閯?chuàng)建SessionFactory需要消耗大量的資源.然后根據(jù)SessionFactory再創(chuàng)建Session對(duì)象
- Session session=sessionFactory.openSession();
- Transaction tx;
- try{
- tx=session.beginTransaction();//開(kāi)始一個(gè)事務(wù)
- .......//執(zhí)行事務(wù)
- tx.commit();
- }catch(Exception e){//如果出現(xiàn)異常就撤消事務(wù)
- if(tx!=null)
- tx.rollback();
- throw e;
- }
- finally//不管事務(wù)執(zhí)行成功與否,最后都關(guān)閉Session并且放在finally中以提高安全性
- session.close();
【編輯推薦】