spring boot + spring data jpa 事務失效


配置:在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);
            }

         


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM