首页 > 编程语言 > 详细

spring boot + spring data jpa 事务失效

时间:2020-07-31 12:42:41      阅读:117      评论:0      收藏:0      [点我收藏+]

配置:在service层的具体方法上开启事务:



import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
public class InventoryServiceImpl implements InventoryService { @Autowired private DemoDao dao; @Override @Transactional public void add(Entity entity){ //TODO
     dao.save(entity);
}

 

事务失效的原因可能有以下三个

 

  • 异常相关
    • 自己在方法内捕获了异常,但是没有抛出,这时候事务aop捕获不到异常,就不会执行回滚操作了。
      •   解决:捕获处理异常后,再往外抛出
    • 方法抛出了spring事务不处理的异常,spring事务默认只处理RuntimeException Error两种异常
      •   解决:配置rollbackFor,指定事务捕获哪些异常
        @Transactional(rollbackFor = Exception.class)

 


 

  • 方法不是public
    •   改呗

 


 

  • 数据库表不是 innodb 引擎
    •   如果是jpa自动生成的表,需要配置一下表的默认引擎(在配置文件中配置方言的方式已经被hibernate过时,官方建议在环境信息或jvm中配置
      •   
            public static void main(String[] args) {
                //配置jpa生成表的默认引擎为innodb
                System.setProperty("hibernate.dialect.storage_engine","innodb");
                SpringApplication.run(NikeDcProcessorApplication.class, args);
            }

         

spring boot + spring data jpa 事务失效

原文:https://www.cnblogs.com/malefeng/p/13408950.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!