Hibernate中怎么實(shí)現(xiàn)事務(wù)對象,針對這個(gè)問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡單易行的方法。
創(chuàng)新互聯(lián)成立與2013年,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢想脫穎而出為使命,1280元江門做網(wǎng)站,已為上家服務(wù),為江門各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18982081108
Hibernate在發(fā)送Sql把對象信息同步到數(shù)據(jù)時(shí),不是立即進(jìn)行的而是把這些要發(fā)送的Sql緩存在起來,在必要的時(shí)候發(fā)送。
通過Session的setFlushMode(FlushMode flushMode)方法,來控制在什么時(shí)候清空Sql的緩沖區(qū),并把緩存的Sql語句發(fā)送出去。
FlushMode是一個(gè)枚舉,它有3個(gè)枚舉值。
FlushMode.AUTO,在持久化對象的信息被修改時(shí),那么就要把它同步到數(shù)據(jù)庫中,更新數(shù)據(jù)庫中隊(duì)?wèi)?yīng)的記錄,也就是在產(chǎn)生修改時(shí)就會(huì)清空緩沖區(qū)。
FlushMode.COMMIT,只有在事務(wù)提交的時(shí)候才清空緩沖區(qū)。
FlushMode.NEVER,這個(gè)值表示只有在調(diào)用了Session的flush()方法才清空緩沖區(qū)。
Hibernate的事務(wù)保證原子操作的不可分,也就是操作的同時(shí)成功或同時(shí)失敗。
Transaction tran=session.beginTranaction();
tran.commit();
tran.rollback();
以上是Hibernate的事務(wù)對象的方法,來實(shí)現(xiàn)對事務(wù)的支持。
hibernate的事務(wù)隔離級別
hibernate的事務(wù)隔離級別和JDBC中大致相同。
設(shè)置時(shí)要在hibernate.cfg.xml配置
< property name="hibernate.connection.isolation">4< /property>
1,讀未提交的數(shù)據(jù)(Read uncommitted isolation)
2,讀已提交的數(shù)據(jù)(Read committed isolation)
4,可重復(fù)讀級別(Repeatable read isolation)
8,可串行化級別(Serializable isolation)
hibernate的鎖(悲觀鎖,樂觀鎖)
悲觀鎖是由數(shù)據(jù)庫本身所實(shí)現(xiàn)的,會(huì)對數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行鎖定,也就是鎖行。
LockMode.UPGRADE,修改鎖,在get()方法中加上這個(gè)設(shè)置作為第三個(gè)參數(shù)。
LockMode.NONE 無鎖機(jī)制
LockMode.READ 讀取鎖
LockMode.WRITE 寫入鎖,不能在程序中直接使用
還可以使用Session.lock() Query.setLockMode() Criteria.setLockMode()方法來設(shè)置鎖
樂觀鎖,也就是通過對記錄加上某些信息來解決并發(fā)訪問的問題。
版本檢查
要在其表中多加上一個(gè)字段表示版本信息,會(huì)在讀取時(shí)讀到這個(gè)版本號,并在修改之后更新這個(gè)版本號,在并發(fā)修改的時(shí),只有數(shù)據(jù)庫中記錄的版本號比要更新的才進(jìn)行更新操作,如果數(shù)據(jù)庫記錄版本號比要更新的高,就會(huì)拋出例外。
寫在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" /> < !--版本控制,指定了版本屬性的名字,和對應(yīng)表中的字段和類型--> < property name="name" column="name"/> < property name="phone" column="phone"/> < /class> < /hibernate-mapping>
關(guān)于Hibernate中怎么實(shí)現(xiàn)事務(wù)對象問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識。
分享文章:Hibernate中怎么實(shí)現(xiàn)事務(wù)對象
當(dāng)前網(wǎng)址:http://aaarwkj.com/article0/isjpoo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)、定制開發(fā)、響應(yīng)式網(wǎng)站、營銷型網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)公司、外貿(mào)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)