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

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

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

javascript

spring.jpa配置_使用JPA和Spring 3.1进行事务配置

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

spring.jpa配置

1.概述

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

有關(guān)核心持久性配置的更深入討論,請(qǐng)查看Spring with JPA教程 。

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

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

Spring 3.1引入了@EnableTransactionManagement批注該批注將在@Configuration類(lèi)中使用,并啟用事務(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ū)動(dòng)和名稱(chēng)空間支持:

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

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

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

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

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

5.潛在的陷阱

5.1。 交易和代理

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

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

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

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

5.2。 更改隔離級(jí)別

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

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

5.3。 只讀交易

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

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

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

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

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

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

5.4。 交易記錄

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

六,結(jié)論

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

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

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

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

spring.jpa配置

總結(jié)

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

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