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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

使用JPA和Spring 3.1进行事务配置

發(fā)布時間:2023/12/3 javascript 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用JPA和Spring 3.1进行事务配置 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1.概述

本教程將討論配置Spring Transactions ,使用@Transactional批注和常見陷阱的正確方法

要更深入地討論核心持久性配置,請查看Spring with JPA教程 。

有兩種不同的配置事務(wù)的方法– 批注和AOP –每種都有自己的優(yōu)勢–我們將在這里討論更常見的批注配置

2.在不使用XML的情況下配置事務(wù)

Spring 3.1引入了@EnableTransactionManagement批注該批注將在@Configuration類中使用,并啟用事務(wù)支持:

@Configuration @EnableTransactionManagement public class PersistenceJPAConfig{@Beanpublic LocalContainerEntityManagerFactoryBean entityManagerFactoryBean(){...}@Beanpublic PlatformTransactionManager transactionManager(){JpaTransactionManager transactionManager = new JpaTransactionManager();transactionManager.setEntityManagerFactory(entityManagerFactoryBean().getObject() );return transactionManager;} }

3.使用XML配置事務(wù)

在3.1之前,或者如果不能使用Java,則這是XML配置 ,使用注釋驅(qū)動和名稱空間支持:

<bean id="txManager" class="org.springframework.orm.jpa.JpaTransactionManager"><property name="entityManagerFactory" ref="myEmf" /> </bean> <tx:annotation-driven transaction-manager="txManager" />

配置了事務(wù)后,現(xiàn)在可以在類或方法級別使用@Transactional注釋Bean:

@Service @Transactional public class FooService {... }

注釋支持進(jìn)一步的配置

  • 交易的傳播類型
  • 交易的隔離級別
  • 事務(wù)包裝的操作的超時
  • readOnly標(biāo)志 –持久性提供程序的提示,該事務(wù)應(yīng)為只讀
  • 詳細(xì)的回滾配置

5.潛在的陷阱

5.1。 交易和代理

在較高的級別上, Spring會在類或任何方法上為所有帶有@Transactional注釋的類創(chuàng)建代理 。 代理允許框架在調(diào)用方法之前和之后注入事務(wù)邏輯–主要用于啟動和提交事務(wù)

要記住的重要一點是,如果事務(wù)Bean正在實現(xiàn)接口,則默認(rèn)情況下,代理將是Java動態(tài)代理 。 這意味著將僅攔截通過代理傳入的外部方法調(diào)用- 任何自調(diào)用將不會啟動任何事務(wù) -即使該方法使用@Transactional進(jìn)行了注釋。

使用代理的另一個警告是, 僅公共方法應(yīng)使用@Transactional進(jìn)行注釋 -其他可見性的方法將僅默默地忽略該注釋,因為這些代理沒有被代理。

本文在這里詳細(xì)討論了進(jìn)一步的代理pitfal 。

5.2。 更改隔離級別

將Spring配置為與JPA一起使用時的主要陷阱之一是,更改事務(wù)語義的隔離將不起作用– JPA不支持自定義隔離級別 。 這是JPA的限制, 不是Spring的限制; 但是,更改@Transactional 隔離屬性將導(dǎo)致:

org.springframework.transaction.InvalidIsolationLevelException:標(biāo)準(zhǔn)JPA不支持自定義隔離級別–為您的JPA實現(xiàn)使用特殊的JpaDialect

5.3。 只讀交易

readOnly標(biāo)志通常會引起混亂,尤其是在使用JPA時; 從javadoc:

這只是實際交易子系統(tǒng)的提示。 它不一定會導(dǎo)致寫訪問嘗試失敗。 當(dāng)請求只讀事務(wù)時,無法解釋只讀提示的事務(wù)管理器不會引發(fā)異常。

事實是, 不能保證在設(shè)置readOnly標(biāo)志時不會發(fā)生插入或更新-它的行為取決于供應(yīng)商,而JPA與供應(yīng)商無關(guān)。

同樣重要的是要了解readOnly標(biāo)志僅在事務(wù)內(nèi)部相關(guān); 如果操作發(fā)生在事務(wù)上下文之外,則僅忽略該標(biāo)志。 一個簡單的示例將調(diào)用帶有以下注釋的方法:

@Transactional( propagation = Propagation.SUPPORTS,readOnly = true )

從非事務(wù)上下文中-將不會創(chuàng)建事務(wù),并且將忽略readOnly標(biāo)志。

5.4。 交易記錄

通過微調(diào)事務(wù)包中的日志記錄 ,還可以更好地理解與事務(wù)相關(guān)的問題。 Spring中的相關(guān)軟件包是“ org.springframework.transaction”,應(yīng)使用TRACE的日志記錄級別對其進(jìn)行配置。

六,結(jié)論

我們介紹了同時使用Java和XML的事務(wù)語義的基本配置,如何使用@Transactional以及事務(wù)策略的最佳實踐。 還討論了Spring對事務(wù)測試的支持以及一些常見的JPA陷阱

這個簡單項目的實現(xiàn)可以在github項目中找到–這是一個基于Eclipse的項目,因此應(yīng)易于導(dǎo)入和運行。

參考:在baeldung博客上,我們JCG合作伙伴 Eugen Paraschiv 與Spring 3和JPA的交易 。

翻譯自: https://www.javacodegeeks.com/2011/12/transaction-configuration-with-jpa-and.html

總結(jié)

以上是生活随笔為你收集整理的使用JPA和Spring 3.1进行事务配置的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。