更新時(shí)間:2023-11-06 來源:黑馬程序員 瀏覽量:
在Hibernate中,可以通過代碼操作管理事務(wù),例如Transaction tx = session.begin Transaction();表示開啟一個(gè)事務(wù);進(jìn)行持久化操作后,執(zhí)行tx.commit();操作提交事務(wù);如果在操作的過程中出現(xiàn)了異常的情況,則執(zhí)行tx.rollback();操作回滾事務(wù)。
除了使用代碼對(duì)事務(wù)的開啟、提交和回滾進(jìn)行操作以外,還可以在Hibernate的配置文件中對(duì)事務(wù)進(jìn)行配置。在配置文件中,可以選擇使用本地事務(wù)或者全局事務(wù),還可以設(shè)置事務(wù)的隔離級(jí)別。其具體的配置方式如下所示:
<!--使用本地事務(wù)--> <property name="hibernate.currrent_session_context_class">thread</property> <!--使用全局事務(wù)--> <property name="hibernate.currrent_session_context_class">jta</property> <!--設(shè)置事務(wù)隔離級(jí)別--> <property name="hibernate.connection_isolation">2</property>
在上述配置代碼中,使用hibernate.current_session_context_calss參數(shù)配置本地事務(wù)和全局事務(wù)。其中,本地事務(wù)是指對(duì)一個(gè)數(shù)據(jù)庫(kù)進(jìn)行的操作,即只針對(duì)一個(gè)事務(wù)性資源進(jìn)行操作;而全局事務(wù)是指由應(yīng)用服務(wù)器管理的事務(wù),它需要使用JTA(Java Transaction API),可以用于多個(gè)事務(wù)性資源(跨多個(gè)數(shù)據(jù)庫(kù))。由于JTA的API非常笨重,一般只在應(yīng)用服務(wù)器的環(huán)境中使用,并且全局事務(wù)的使用限制了應(yīng)用代碼的重用性,所以Hibernate的事務(wù)管理通常會(huì)選擇使用本地事務(wù)。
在上述配置中,還使用了hibernate.connection.isolation參數(shù)配置事務(wù)的隔離級(jí)別,并將事務(wù)的隔離級(jí)別設(shè)置為2,表示讀已提交。在Hibernate中,使用數(shù)字表示不同的隔離級(jí)別,它與數(shù)據(jù)庫(kù)中的隔離級(jí)別相同,具體對(duì)應(yīng)關(guān)系如下。
· 1-Read uncommitted讀未提交。
· 2-Read committed讀已提交。
·4-Repeatable read可重復(fù)讀。
·8-Serializable串行化。
本文版權(quán)歸黑馬程序員Java培訓(xùn)學(xué)院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明作者出處。謝謝!
作者:黑馬程序員Java培訓(xùn)學(xué)院
首發(fā):https://java.itheima.com