在最近的项目中,做的是解析XML文件,解析过程中会有异常,比如:XML文件中节点的数据和与之对应的数据库的字段中数据的类型不匹配;XML中数据长度超过数据库定义的长度;有数据了的重复插入问题;读取节点出错;XML文件路径出错……会遇到很多异常

我的项目使用的是Spring Boot,Spring Data JPA 其中Spring已经封装好了事务,在注解@Transactional中,自动执行事务,出异常自动回滚,但在使用的时候会遇到一些问题:

在多个方法中使用@Transactional,其中一个方法运行时候报错,但是数据却插进去了,但是其他两个方法没有;有时候抛了异常,却不会回滚;方法嵌套的时候执行报错……

查阅了一些资料后,得知是没有正确使用Spring的@Transactional。

下面借用我查到的别人的博客中的例子来说明Spring的@Transactional到底怎么用:

1 @Service2 public classSysConfigService {3

4 @Autowired5 privateSysConfigRepository sysConfigRepository;6

7 publicSysConfigEntity getSysConfig(String keyName) {8 SysConfigEntity entity =sysConfigRepository.findOne(keyName);9 returnentity;10 }11

12 publicSysConfigEntity saveSysConfig(SysConfigEntity entity) {13

14 if(entity.getCreateTime()==null){15 entity.setCreateTime(newDate());16 }17

18 returnsysConfigRepository.save(entity);19

20 }21

22 @Transactional23 public void testSysConfig(SysConfigEntity entity) throwsException {24 //不会回滚

25 this.saveSysConfig(entity);26 throw new Exception("sysconfig error");27

28 }29

30 @Transactional(rollbackFor = Exception.class)31 public void testSysConfig1(SysConfigEntity entity) throwsException {32 //会回滚

33 this.saveSysConfig(entity);34 throw new Exception("sysconfig error");35

36 }37

38 @Transactional39 public void testSysConfig2(SysConfigEntity entity) throwsException {40 //会回滚

41 this.saveSysConfig(entity);42 throw new RuntimeException("sysconfig error");43

44 }45

46 @Transactional47 public void testSysConfig3(SysConfigEntity entity) throwsException {48 //事务仍然会被提交

49 this.testSysConfig4(entity);50 throw new Exception("sysconfig error");51 }52

53 @Transactional(rollbackFor = Exception.class)54 public void testSysConfig4(SysConfigEntity entity) throwsException {55

56 this.saveSysConfig(entity);57 }58

59

60

61 }

对于常用的Spring的@Transactional的总结如下:

1、异常在A方法内抛出,则A方法就得加注解

2、多个方法嵌套调用,如果都有 @Transactional 注解,则产生事务传递,默认 Propagation.REQUIRED

3、如果注解上只写 @Transactional 默认只对 RuntimeException 回滚,而非 Exception 进行回滚

4、如果要对 checked Exceptions 进行回滚,则需要 @Transactional(rollbackFor = Exception.class)

jpa transaction 回滚_我遇到的JPA中事务回滚的问题相关推荐

  1. 多个mapper的事务回滚_揭秘蚂蚁金服分布式事务 Seata 的AT、Saga和TCC模式

    作者| 屹远(陈龙),蚂蚁金服分布式事务核心研发 . 导语 本文根据 8月11日 SOFA Meetup#3 广州站 <分布式事务 Seata 及其三种模式详解>主题分享整理,着重分享分布 ...

  2. git 代码回滚_能提交到远程的Git回滚

    很多情况下我们需要回滚代码,最容易想到的就是git reset.但是git reset有个弱点,它是一个彻底的回滚,不能再提交给远程了,因为在提交记录里回滚点之后的记录都不见了. 做一下试验,一个文件 ...

  3. 计算最大回撤_量化扫盲:什么是最大回撤?

    简要说明:最大回撤是衡量策略风险的重要指标,可理解为可能发生的最大亏损幅度,其值等于策略收益曲线上,高点到后期最低点的回撤幅度的最大值. 衡量一个策略风险控制能力,最大回撤是最常用的指标,描述了投资者 ...

  4. jpa 手动预编译_编译时检查JPA查询

    jpa 手动预编译 JPA提供了几种查询数据的方法. 可以根据各种标准(例如,使用的语言(SQL与JPQL)或查询是静态的(编译时间)还是动态的(执行时间))对此类替代方案进行分类. 静态查询是使用@ ...

  5. spring jpa mysql集群_微框架:Springboot+Jpa+mysql零基础上手班

    [课前科普百科] 企业的很多技术都是保密的,尤其是实战项目和新兴技术.Springboot是目前互联网薪的技术.Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spr ...

  6. java上传图片回显_【java】批量上传图片并回显功能

    一.前言 在电商的网站中,图片上传功能必不可少,小编在最近的项目中就有遇到了一个批量上传图片并且要回显的功能.可以说这是一个很常见的功能了,已经烂大街了,但是小编还是要认真的分析一下,以便日后用到. ...

  7. 曲线行驶最后什么时候回正_曲线行驶出弯时什么时候回正方向

    1 打开前雾灯开关,(如图所示)亮起.查看本题分析 2 变更车道时只需开启转向灯,并迅速转向驶入相应的车道,以不妨碍同车道机动车正常行驶.查看本题分析 3 这个标志的含义是警告车辆驾驶人前方是学校区域 ...

  8. Spring控制事务回滚

    Spring控制事务回滚 1.说明 2.声明式性事务@Transacational 3.@Transactional不适用场景 4.@Transactional注解事务失效的几种场景及原因 4.1.数 ...

  9. java pg数据库事务回滚,基于Postgresql 事务的提交与回滚解析

    用过oracle或mysql的人都知道在sqlplus或mysql中,做一个dml语句,如果发现做错了,还可以rollback;掉,但在PostgreSQL的psql中,如果执行一个dml,没有先运行 ...

最新文章

  1. Jacobian矩阵和Hessian矩阵的理解
  2. 电气期刊论文实现:考虑排放目标和输电损耗的经济调度【有代码】
  3. Android插件化开发之动态加载三个关键问题详解
  4. 【实践】多场景下的搜索词推荐算法及在腾讯的应用实践.pdf(附下载链接)
  5. XMLHttpRequest发送POST请求
  6. 2.1.0 Python初识面向对象
  7. 【OFDM通信】基于matlab OFDM通信系统仿真【含Matlab源码 315期】
  8. MySQL数据库性能优化方法,一篇给你总结了
  9. 帆软填报报表的使用教程
  10. java打印sscil码_SSCI期刊投稿指南库
  11. 车牌号测试打分最准确的软件,汽车牌号码测吉凶_车牌号码测试打分_周易测车牌号吉凶 神巴巴测试网...
  12. Linux下的gpt分区
  13. 塞规公差带图_塞规公差计算表
  14. 我是如何在12周内由零基础成为一名程序员的——谨以此文激励自己!!!
  15. 如何安装R以及RStudio?打开RStudio页面告诉你没安装R或者出现页面空白问题
  16. python接口自动化搭配Gitlab 和jenkins持续集成
  17. 老闪创业那些事儿(4)——A轮融资的选择
  18. Linux下往github上传项目
  19. Python 魔方方法
  20. MySQL 8.0踩到的坑(2)

热门文章

  1. mybatis源码深度解析_30天消化MyBatis源码解析笔记,吊打面试官,offer接到手软
  2. PHP字符串运算结果,PHP 实现后缀表达式(接受四则运算字符串,输出计算结果,附代码)...
  3. qt中拖动窗口widget
  4. Python2.x 和 Python3.x,如何选择?
  5. 安卓9与10的系统要求_代码开源!支持RISC-V架构的安卓系统终于来了!
  6. mysql 5.7 io 性能 aio_深入理解MySQL的InnoDB引擎
  7. Android在线更新安装包,Android在线更新下载方案
  8. python隐式等待_selenium中隐式等待和显示等待的区别
  9. numpy支持比python更多的数据类型_NumPy数据类型
  10. cmd c语言 图形,CMD-C彩图隐写方案