博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JPA的事务注解@Transactional使用总结
阅读量:6844 次
发布时间:2019-06-26

本文共 2332 字,大约阅读时间需要 7 分钟。

 

在项目开发过程中,如果您的项目中使用了Spring的@Transactional注解,有时候会出现一些奇怪的问题,例如:

 

明明抛了异常却不回滚?

嵌套事务执行报错?

...等等

 

很多的问题都是没有全面了解@Transactional的正确使用而导致的,下面一段代码就可以让你完全明白@Transactional到底该怎么用。

 

直接上代码,请细细品味

@Servicepublic class SysConfigService {    @Autowired    private SysConfigRepository sysConfigRepository;        public SysConfigEntity getSysConfig(String keyName) {        SysConfigEntity entity = sysConfigRepository.findOne(keyName);        return entity;    }        public SysConfigEntity saveSysConfig(SysConfigEntity entity) {                if(entity.getCreateTime()==null){            entity.setCreateTime(new Date());        }                return sysConfigRepository.save(entity);                    }        @Transactional    public void testSysConfig(SysConfigEntity entity) throws Exception {        //不会回滚        this.saveSysConfig(entity);        throw new Exception("sysconfig error");            }        @Transactional(rollbackFor = Exception.class)    public void testSysConfig1(SysConfigEntity entity) throws Exception {        //会回滚        this.saveSysConfig(entity);        throw new Exception("sysconfig error");            }        @Transactional    public void testSysConfig2(SysConfigEntity entity) throws Exception {        //会回滚        this.saveSysConfig(entity);        throw new RuntimeException("sysconfig error");            }        @Transactional    public void testSysConfig3(SysConfigEntity entity) throws Exception {        //事务仍然会被提交        this.testSysConfig4(entity);        throw new Exception("sysconfig error");    }        @Transactional(rollbackFor = Exception.class)    public void testSysConfig4(SysConfigEntity entity) throws Exception {                this.saveSysConfig(entity);    }            }

 

总结如下:

/**         * @Transactional事务使用总结:         *          * 1、异常在A方法内抛出,则A方法就得加注解         * 2、多个方法嵌套调用,如果都有 @Transactional 注解,则产生事务传递,默认 Propagation.REQUIRED         * 3、如果注解上只写 @Transactional  默认只对 RuntimeException 回滚,而非 Exception 进行回滚         * 如果要对 checked Exceptions 进行回滚,则需要 @Transactional(rollbackFor = Exception.class)         *          * org.springframework.orm.jpa.JpaTransactionManager         *          * org.springframework.jdbc.datasource.DataSourceTransactionManager         *          * org.springframework.transaction.jta.JtaTransactionManager         *          *          *          */

 

转载地址:http://ujcul.baihongyu.com/

你可能感兴趣的文章
IOS UITableView详解二性能优化 & LOL游戏人物展示
查看>>
nexus 7 恢复出厂设置后一系列问题
查看>>
关于jFinal Db.query与Db.find 的理解
查看>>
源码解读Saltstack运行机制之Job Runtime
查看>>
2012-01-07 21:58
查看>>
Hyper-V: Making Template Virtual Machines
查看>>
如何避免忙成狗
查看>>
JavaWeb学习之Servlet(四)----ServletConfig获取配置信息、Servle
查看>>
使用Redisson实现分布式锁
查看>>
LVS DR模式详细搭建过程
查看>>
致敬 54岁的刘德华
查看>>
使用pushd和popd进行快速定位
查看>>
Vmware Workstation 10.0.1 build-1379776 patch for Linux kernel 3.13
查看>>
error while loading shared libraries: libiconv.so.2
查看>>
shell自动分区
查看>>
记录几个重要词汇的解析。
查看>>
在web项目中使用KSOAP2调用WebService
查看>>
zabbix安装详细文档
查看>>
2016年linux运维人员必会开源运维工具体系
查看>>
linux学习作业-第一周
查看>>