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

spring.jpa配置

1.概述

本教程将讨论配置Spring Transactions ,使用@Transactional批注和常见陷阱的正确方法

有关核心持久性配置的更深入讨论,请查看Spring with JPA教程 。

有两种不同的配置事务的方法– 批注和AOP –每种都有自己的优势–我们将在这里讨论更常见的批注配置

2.在不使用XML的情况下配置事务

Spring 3.1引入@EnableTransactionManagement批注该批注将在@Configuration类中使用,并启用事务支持:

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

3.使用XML配置事务

在3.1之前,或者如果不能使用Java,则这是XML配置 ,使用注释驱动和名称空间支持:

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

配置了事务后,现在可以在类或方法级别使用@Transactional注释Bean:

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

注释支持进一步的配置

  • 交易的传播类型
  • 交易的隔离级别
  • 事务包装的操作的超时
  • readOnly标志 –持久性提供程序的提示,该事务应为只读
  • 详细的回滚配置

5.潜在的陷阱

5.1。 交易和代理

在较高的级别上, Spring会在类或任何方法上为所有用@Transactional注释的类创建代理 。 代理允许框架在调用方法之前和之后注入事务逻辑–主要用于启动和提交事务

要记住的重要一点是,如果事务Bean正在实现接口,则默认情况下,代理将是Java动态代理 。 这意味着将仅拦截通过代理传入的外部方法调用- 任何自调用将不会启动任何事务 -即使该方法使用@Transactional进行了注释。

使用代理的另一个警告是, 仅公共方法应使用@Transactional进行注释 -其他可见性的方法将仅默默地忽略该注释,因为这些代理没有被代理。

本文在这里详细讨论了进一步的代理pitfal 。

5.2。 更改隔离级别

将Spring配置为与JPA一起使用时的主要陷阱之一是,更改事务语义的隔离将不起作用– JPA不支持自定义隔离级别 。 这是JPA的限制, 不是Spring的限制; 但是,更改@Transactional 隔离属性将导致:

org.springframework.transaction.InvalidIsolationLevelException:标准JPA不支持自定义隔离级别-为您的JPA实现使用特殊的JpaDialect

5.3。 只读交易

readOnly标志通常会引起混乱,尤其是在使用JPA时; 从javadoc:

这只是实际交易子系统的提示。 它不一定会导致写访问尝试失败。 当请求只读事务时,无法解释只读提示的事务管理器不会引发异常。

事实是, 不能保证在设置readOnly标志时不会发生插入或更新-其行为取决于供应商,而JPA与供应商无关。

同样重要的是要了解readOnly标志仅在事务内部相关; 如果操作发生在事务上下文之外,则仅忽略该标志。 一个简单的示例将调用带有以下注释的方法:

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

从非事务上下文中-将不会创建事务,并且将忽略readOnly标志。

5.4。 交易记录

通过微调事务包中的日志记录 ,还可以更好地理解与事务相关的问题。 Spring中的相关软件包是“ org.springframework.transaction”,应使用日志记录级别TRACE进行配置。

六,结论

我们介绍了同时使用Java和XML的事务语义的基本配置,如何使用@Transactional以及事务策略的最佳实践。 还讨论了Spring对事务测试的支持以及一些常见的JPA陷阱

这个简单项目的实现可以在github项目中找到–这是一个基于Eclipse的项目,因此应该很容易直接导入和运行。

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

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

spring.jpa配置

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/359017.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

双千兆和双频千兆哪个好_关于千兆路由器的那些事儿!赶紧收藏

无线Wi-Fi已成为现代人生活、工作的标配&#xff0c;随着百兆乃至千兆的光纤网络普及&#xff0c;传统路由器已跟不上时代的速度了。不少用户的眼光已投向速度更快的千兆路由器&#xff0c;那么大家真的了解什么是千兆路由器吗&#xff1f;千兆路由器有哪几种&#xff1f;近期火…

宝塔常用的命令大全(直接上官网)

安装宝塔 Centos安装脚本 yum install -y wget && wget -O install.sh http://download.bt.cn/install/install.sh && sh install.sh Ubuntu/Deepin安装脚本 wget -O install.sh http://download.bt.cn/install/install-ubuntu.sh && sudo bash ins…

华三ospf联动bfd_HCIE2020__路由交换专家__BFD综合实验

1.1.1 关于本实验本实验通过配置BFD与BGP协议联动及与VRRP协议联动&#xff0c;掌握BFD的功能和配置方法。1.1.2 实验目的理解BFD的工作原理。 掌握BFD与BGP联动的应用场景及配置方法。 掌握BFD与VRRP联动的应用场景及配置方法。1.1.3 实验组网介绍图1-1 BFD原理配置实验拓扑图…

struts2,实现Ajax异步通信

用例需要依赖的jar&#xff1a; struts2-core.jarstruts2-convention-plugin.jar&#xff0c;非必须org.codehaus.jackson.jar&#xff0c;提供json支持用例代码如下&#xff1a; 数据库DDL语句无 struts.xml1 <?xml version"1.0" encoding"UTF-8"?&g…

快速提示:消息驱动Bean中的异常处理

让我们快速回顾一下有关消息驱动Bean的特殊处理。 MDB的入口点是重写的onMessage方法。 它不提供引发检查异常的任何作用域&#xff0c;因此&#xff0c;如果要处理错误情形&#xff0c;则需要从代码中传播未检查异常&#xff08;java.lang.RuntimeException的子类&#xff09…

大学生助学贷款如何还利息(本金+利息都可以)

生源地助学贷款还利息的步骤: 1、首先需要将钱转入支付宝,金额稍微高于应还款项即可。然后登陆电脑版支付宝,一定是要电脑登陆(手机上无法操作),如图所示 2、然后在支付宝主页中,点击右上角的“应用中心”,然后点击“生活服务”如图所示。

(实用)将wordpad添加到Windows PowerShell中

PowerShell能够直接打开notepad&#xff0c;但是无法调用wordpad&#xff0c;因为后者的可执行文件并不在系统默认的环境变量$env:Path中&#xff0c;只要将wordpad所在的路径添加到$env:Path&#xff0c;就可以从CMD或PowerShell中直接启动wordpad。 在PowerSehll下输入&#…

mysql分组区某列最后一条_[MySQL]MySQL数据库如何按某列分组排序后查询每个分组的最后一条数据?...

比如当前有如下的消息表(messages)及示例数据&#xff1a;Id Name Other_Columns-------------------------1 A A_data_12 A A_data_23 A A_data_34 B B_data_15 B B_data_26 C C_data_1按照以下SQL语句查询&#xff1a;select * from messages group by name得到的查询结果为&…

谷歌浏览器下载的内容老是自动打开

原因是每次下载内容在浏览器左下角都有提示&#xff0c;一般都是选择打开所在文件夹&#xff0c;一次手残&#xff0c;点了总是打开此文件导致一下载文件就自动打开。 解决方法。 1.点击右上角的... 2.找到设置-高级设置-下载 3.关掉我标红的位置信息即可。现在看不到啦&…

JBoss Fuse 6.2发布–指导如何快速尝试

在上周的红帽峰会上&#xff0c;宣布发布了JBoss Fuse 6.2 。 我要祝贺保险丝团队发布此版本。 我知道他们今年以来一直非常努力地进行质量检查&#xff0c;并确保质量检查通过了企业产品所期望的高品质壁垒。 因此&#xff0c;带着我的Camel帽子&#xff0c;很高兴看到包含最…

插入文件找不到桌面了?

解决方法&#xff0c;在那个界面空白处&#xff0c;右键显示所有文件即可。

mysql自增长主键_MySQL数据库8(九)列属性之主键、自增长

主键顾名思义&#xff0c;主要的键&#xff0c;primary key&#xff0c;在一张表中&#xff0c;有且只有一个字段&#xff0c;里面的值具有唯一性创建主键随表创建系统提供了两种增加主键的方式&#xff1a;1、直接在需要当做主键的字段之后&#xff0c;增加primary key属性来确…

微信小程序速成页面

你是否还在辛辛苦苦地码代码&#xff0c;特别是前端页面的编写&#xff0c;很多都是非常简单的&#xff0c;但界面多了还是要花费大量的时间&#xff0c;缩短了你陪男/女朋友的时间&#xff0c;家人的时间&#xff0c;休闲的时光。 微信小程序前端开发者工具将大大地为您节省开…

Ajax 生成流文件下载 以及复选框的实现

JQuery的ajax函数的返回类型只有xml、text、json、html等类型&#xff0c;没有“流”类型&#xff0c;所以我们要实现ajax下载&#xff0c;不能够使用相应的ajax函数进行文件下载。但可以用js生成一个form&#xff0c;用这个form提交参数&#xff0c;并返回“流”类型的数据。在…

mysql1130_解决远程连接mysql错误1130的方法

解决远程连接mysql错误1130代码的方法今天在用远程连接Mysql服务器的数据库&#xff0c;不管怎么弄都是连接不到&#xff0c;错误代码是1130&#xff0c;ERROR 1130: Host 192.168.2.159 is not allowed to connect to this MySQL server猜想是无法给远程连接的用户权限问题。结…

使用Classycle验证类/包依赖关系

Classycle是一个非常好的类和包依赖项的分析器和依赖项检查器。 它使您可以定义程序包组&#xff08;组件&#xff0c;层&#xff09;&#xff0c;并表达不需要的依赖性&#xff0c;例如周期或特定程序包之间的依赖性。 例如&#xff0c;您可以指定不希望包周期&#xff0c;也…

初学者如何学编程呢

先简单做个测试,这样就能找出你比较适合哪种语言。 下面简单介绍一下不同的语言吧

CellSet 遍历

CellSet 结构&#xff1a; 查询MDX&#xff1a; SELECT NON EMPTY {{ {{ {{ {{ {{ AddCalculatedMembers([店铺.店铺ID].[店铺ID].Members)}} }} }} }} }} DIMENSION PROPERTIES MEMBER_TYPE , [店铺.店铺ID].[店铺ID].[国家], [店铺.店铺ID].[店铺ID].[区域], [店铺.…

查看mysql字段的编码_MySQL查看和修改字符编码的实现方法

MySQL查看和修改字符编码的实现方法遇到一个插入数据库的乱码&#xff0c;因为是&#xff1a;mac版本的&#xff0c;按网上说的就是不能改变&#xff0c;其编码方式&#xff0c;本人的机器&#xff1a;mysql-***.dmg默认安装后的编码是&#xff1a;如下图&#xff1a;有两个编码…

如何找到微信公众号的视频链接及视频?

我们经常在微信公众号中看到一些视频,那么有时候看到比较好的我们都希望能把这个视频下载下来,长久保存! 那么,如何找到视频的原链接并下载成为自己的视频呢?我给大家简单总结一下吧。 首先要明白微信公众号的视频来源只会出现在腾讯视频和微视两个平台。 ​以这个公众号…