溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Hibernate中怎么實現事務對象

發布時間:2021-08-11 15:32:51 來源:億速云 閱讀:187 作者:Leah 欄目:編程語言

Hibernate中怎么實現事務對象,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

Hibernate在發送Sql把對象信息同步到數據時,不是立即進行的而是把這些要發送的Sql緩存在起來,在必要的時候發送。

通過Session的setFlushMode(FlushMode flushMode)方法,來控制在什么時候清空Sql的緩沖區,并把緩存的Sql語句發送出去。

FlushMode是一個枚舉,它有3個枚舉值。

FlushMode.AUTO,在持久化對象的信息被修改時,那么就要把它同步到數據庫中,更新數據庫中隊應的記錄,也就是在產生修改時就會清空緩沖區。

FlushMode.COMMIT,只有在事務提交的時候才清空緩沖區。

FlushMode.NEVER,這個值表示只有在調用了Session的flush()方法才清空緩沖區。

Hibernate的事務保證原子操作的不可分,也就是操作的同時成功或同時失敗。

Transaction tran=session.beginTranaction();

tran.commit();

tran.rollback();

以上是Hibernate的事務對象的方法,來實現對事務的支持。

hibernate的事務隔離級別

hibernate的事務隔離級別和JDBC中大致相同。

設置時要在hibernate.cfg.xml配置

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

1,讀未提交的數據(Read uncommitted isolation)

2,讀已提交的數據(Read committed isolation)

4,可重復讀級別(Repeatable read isolation)

8,可串行化級別(Serializable isolation)

hibernate的鎖(悲觀鎖,樂觀鎖)

悲觀鎖是由數據庫本身所實現的,會對數據庫中的數據進行鎖定,也就是鎖行。

LockMode.UPGRADE,修改鎖,在get()方法中加上這個設置作為第三個參數。

LockMode.NONE 無鎖機制

LockMode.READ 讀取鎖

LockMode.WRITE 寫入鎖,不能在程序中直接使用

還可以使用Session.lock() Query.setLockMode() Criteria.setLockMode()方法來設置鎖

樂觀鎖,也就是通過對記錄加上某些信息來解決并發訪問的問題。

版本檢查

要在其表中多加上一個字段表示版本信息,會在讀取時讀到這個版本號,并在修改之后更新這個版本號,在并發修改的時,只有數據庫中記錄的版本號比要更新的才進行更新操作,如果數據庫記錄版本號比要更新的高,就會拋出例外。

寫在Xxxxx.hbm.xml中

< version name="version" column="version" type="integer" />

例:

public class User implements Serializable{       private int id;       private String name;       private String phone;       private int version;//記錄版本的屬性       public int getId(){           return id;       }         public void setId(int id){           this.id = id;       }         public String getName(){           return name;       }         public void setName(String name){           this.name = name;       }         public String getPhone(){           return phone;       }         public void setPhone(String phone){           this.phone = phone;       }         public int getVersion(){           return version;       }         public void setVersion(int version){           this.version = version;       }             }

User類的User.hbm.xml文件

< hibernate-mapping package="alan.hbn.concur.version" auto-import="false">       < class name="User" table="user_version">           < id name="id" column="id" type="integer" unsaved-value="0">                < generator class="native"/>           < /id>           < version name="version" column="version" type="integer" />           < !--版本控制,指定了版本屬性的名字,和對應表中的字段和類型-->           < property name="name" column="name"/>           < property name="phone" column="phone"/>               < /class>  < /hibernate-mapping>

關于Hibernate中怎么實現事務對象問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女