日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

hibernate教程--事务处理详解

發布時間:2025/3/20 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hibernate教程--事务处理详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Hibernate的事務處理

1、事務:

事務就是邏輯上的一組操作,要么全都成功,要么全都失敗!!!

2、事務特性:

  • 原子性:事務一組操作不可分割.

  • 一致性:事務的執行前后,數據完整性要保持一致.

  • 隔離性:一個事務在執行的過程中不應該受到其他事務的干擾.

  • 持久性:一旦事務結束,數據就永久保存數據庫.

如果不考慮事務的隔離性引發一些安全性問題:

5大類問題:3類讀問題 2類寫問題.

3、讀問題:

  • 臟讀:一個事務讀到另一個事務未提交數據.

  • 不可重復讀:一個事務讀到另一個事務已經提交數據(update),導致查詢結果不一致.

  • 虛讀:一個事務讀到另一個事務已經提交的數據(insert),導致查詢結果不一致

  • 避免三種讀的問題:

  • 設置事務的隔離級別:

  • 未提交讀:以上三種讀問題 都有可能發生.

  • 已提交讀:避免臟讀,但是不可重復讀和虛讀有可能發生.

  • 重復讀:避免臟讀和不可重復讀,但是虛讀是有可能發生.

  • 串行的:可以避免以上三種讀問題.

  • 在hibernate中設置事務的隔離級別:

  • 在核心配置文件中:

<property name="hibernate.connection.isolation">4</property>

4、 寫問題:丟失更新

  • 解決;

悲觀鎖:

樂觀鎖;

線程綁定的session:

在Hibernate.cfg.xml中配置一個:

thread

  • 使用SessionFactory中的getCurrentSession();方法.

  • 底層就是ThreadLocal.

5、測試

package com.sihai.hibernate3.test; import org.hibernate.LockMode; import org.hibernate.Session; import org.hibernate.Transaction; import org.junit.Test; import com.sihai.hibernate3.demo1.Customer; import com.sihai.utils.HibernateUtils; /** * Hibernate的事務與并發的測試類: * @author sihai * */ public class HibernateTest5 { @Test public void demo9(){ Session session = HibernateUtils.getCurrentSession(); Transaction tx = session.beginTransaction(); Customer customer = new Customer(); customer.setCname("李四"); session.save(customer); tx.commit(); // session.close(); } @Test // 本地Session public void demo8(){ Session session1 = HibernateUtils.getCurrentSession(); Session session2 = HibernateUtils.getCurrentSession(); System.out.println(session1 == session2); } @Test // 本地Session public void demo7(){ Session session1 = HibernateUtils.openSession(); Session session2 = HibernateUtils.openSession(); System.out.println(session1 == session2); } @Test // 樂觀鎖解決丟失更新: public void demo6(){ Session session = HibernateUtils.openSession(); Transaction tx = session.beginTransaction(); Customer customer = (Customer) session.get(Customer.class,3); customer.setAge(36); tx.commit(); session.close(); } @Test // 樂觀鎖解決丟失更新: public void demo5(){ Session session = HibernateUtils.openSession(); Transaction tx = session.beginTransaction(); Customer customer = (Customer) session.get(Customer.class,3); customer.setCname("鐵男"); tx.commit(); session.close(); } @SuppressWarnings("deprecation") @Test // 悲觀鎖解決丟失更新: public void demo4(){ Session session = HibernateUtils.openSession(); Transaction tx = session.beginTransaction(); Customer customer = (Customer) session.get(Customer.class,3,LockMode.UPGRADE); customer.setAge(36); tx.commit(); session.close(); } @SuppressWarnings("deprecation") @Test // 悲觀鎖解決丟失更新: public void demo3(){ Session session = HibernateUtils.openSession(); Transaction tx = session.beginTransaction(); Customer customer = (Customer) session.get(Customer.class,3,LockMode.UPGRADE); customer.setCname("鐵男"); tx.commit(); session.close(); } @Test // 演示丟失更新 public void demo2(){ Session session = HibernateUtils.openSession(); Transaction tx = session.beginTransaction(); Customer customer = (Customer) session.get(Customer.class, 3); customer.setAge(36); tx.commit(); session.close(); } @Test // 演示丟失更新 public void demo1(){ Session session = HibernateUtils.openSession(); Transaction tx = session.beginTransaction(); Customer customer = (Customer) session.get(Customer.class, 3); customer.setCname("鐵男"); tx.commit(); session.close(); } }

總結

以上是生活随笔為你收集整理的hibernate教程--事务处理详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。