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