关于引入JTA项目,程序代码块中添加Transactional注解会失效

最近在我的项目总是配置了事务注解,但事务注解总感觉是没有生效的,就给自己留下了很多疑惑,今天正好整明白了做个总结,分享一下。

@Transactional(rollbackFor = Exception.class)

这是我之前加的这个事务注解,但总是未生效的
通过新写一个小单元测试:

@Test
    @Transactional(rollbackFor = Exception.class)
    public void insertTab() throws Exception{
        String createDictionaryTableB = "create table test20200110\r\n" + "(\r\n" + "KEY INTEGER,\r\n"
                + "D VARCHAR2(100) ,\r\n"
                + "E VARCHAR2(100) ,\r\n" + "F DATE\r\n" + ")";
        sqlMapper.excuteSql(createDictionaryTableB);

        String contentA = "INSERT INTO test20200110 (KEY,D,E,F) VALUES (1,'项目1','变化值1',to_date('2019-10-31 00:00:00','yyyy-mm-dd hh24:mi:ss'))";
        sqlMapper.excuteSql(contentA);

        String contentB = "INSERT INTO test20200110 (KEY,D,E,F) VALUES (3,'项目3','变化值3',to_date('2019-10-31 00:00:00','yyyy-mm-dd hh24:mi:ss'))";
        sqlMapper.excuteSql(contentB);

        if(1==1){
            throw new SQLException("1111");
        }
        System.out.println("-------事务开始回滚-------");
    }

结果:
在这里插入图片描述
在这里插入图片描述
在上面的截图中发现有JTA事务回滚的写法,而我的项目中是没有用到的,应该是框架的代码引进来(但是默认应该是false才对),而执行结果在数据库中也存了值,事务明明回滚了,为啥就没有用呢?
尝试在配置文件中显示配置:
在这里插入图片描述
清除之前表结构和内容,重新执行单元测试,结果
在这里插入图片描述
表结构还存在,但是内容不会生成了,说明现在的事务是发挥了作用。
总结:
(1)凡是引入JTA的项目 就算未使用 也需要手动显式声明JTA为flase,未手动声明的话,事务会被JTA接管 导致事务注解失效,脏数据产生
(2)建表事务不会回滚,插入语句会回滚

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值