Hibernate事務配置
小編:管理員 442閱讀 2022.09.14
//
Hibernate事務管理
//
- 事務
- 設置事務級別
- 事務服務層連接
01
事務
什么是事務?
邏輯上的一組操作,要么一起成功,要么就都不算。不能有的執行了,有的沒執行
事務的特性?
原子性 |
事務不能分隔 |
---|---|
隔離性 |
執行一個事務時, 不應受到其它事務的干擾 |
一致性 |
事務執行前后 ,數據的完整性要保持一致 |
持久性 |
操作完成后就在數據庫中 |
事務的隔離級別?
Read uncommitted |
所有問題都會發生 |
---|---|
Read committed |
解決臟讀問題 |
Repeatable read |
解決臟讀和不可重復讀 |
Serializable |
解決所有問題,效率較低 |
隔離級別詳細SQL事務
02
設置事務隔離級別
在核心配置文件hibernate.cfg.xml當中
通過數字來代表不同的隔離級別
<property name="hibernate.connection.isolation">4</property>復制
設置的值是1,2,3,4代表四個隔離級別
03
事務業務層連接
為什么在服務層使用事務?
在dao層的工作是連接數據庫做各個基本功能,比如增刪改查等。而服務層的作用才是去組織dao的小功能去實現完整的業務邏輯并返回結果給web層
在外部處理時session怎么保持一致?

因為開啟事務需要session所以服務層需要用到session,而且事務里面語句用的session也應該是一個。那么怎么能保證服務層用的session和事務中兩個方法的session一樣呢?
首先很容易想到的就是從上往下傳遞的方式
TestService{ Session session = HibernateUtil.openSession(); dao.session = session; test(){ Transaction tra = session.beginTransaction(); dao.insertMoney(); dao.update(); tra.commit(); }復制
public TestDao{ public static Session session; public void insertMoney(){ session.save(obj); } public void insertMoney(){ session.save(obj); } }復制
但這樣有點太笨重,在Hibernate內部綁定了個session在ThreadLocal,也就是說在一次完整請求中即是在一次線程上有一個session,只需要獲取這個session那肯定就是同一個session了
默認這個是關閉的,需要在核心配置文件打開
<property name="current_session_context_class">thread</property>復制
并且這個session不需要手動關閉,執行完后會自動關閉
TestService{ SessionFactory sf = HibernateUtil.getSessionFactory(); test(){ Transaction tra = sf.getCurrenSession().beginTransaction(); dao.insertMoney(); dao.update(); tra.commit(); } }復制
public TestDao{ SessionFactory sf = Hibernate.getSessionFactory(); public void insertMoney(){ sf.getCurrentSession().session.save(obj); } public void insertMoney(){ sf.getCurrentSession().session.save(obj); } }復制
相關推薦
- 經典筆試題-JDBC及Hibernate篇 五、JDBC 及Hibernate:(共12 題:基礎10 道,中等難度2 道)110、數據庫,比如100 用戶同時來訪,要采取什么技術解決?【基礎】 答:可采用連接池。111、什么是ORM?【基礎】 答:對象關系映射(Object—Relational Mapping,簡稱ORM)是一種為了解決面向對象…
- Hibernate Criterion 在查詢方法設計上能夠靈活的依據Criteria的特點來方便地進行查詢條件的組裝.Hibernate設計了CriteriaSpecification作為Criteria的父接口,以下提供了Criteria和DetachedCriteria.Criteria和DetachedCriteria的主要差別在于創建的形式不一樣,Criteria是在線的,所…