spring data jpa transaction不回滚

时间:2018-02-27 12:05:45

标签: spring-data-jpa spring-transactions

我正在使用Spring Data Jpa并在发生某些事情时添加插入到第二个表中,而第一个事务不是回滚 插入

后,第一次插入提交
 @Override
    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = 
  Exception.class)
    public void addVehicleType(Map<String, Object> model)throws Exception {
        VehicleType     vehicleType     = null;
        VehicleStatus   vehicleStatus   = null;
        try {
            vehicleType         = (VehicleType) model.get("vehicleType");
            vehicleStatus       = (VehicleStatus) model.get("vehicleStatus");

            vehicleStatusRepository.save(vehicleStatus);

            vehicleTypeRepository.save(vehicleType);

        } catch (Exception e) {
            throw e;
        }

VehicleTypeRepository.java

public interface VehicleTypeRepository extends JpaRepository<VehicleType, Long> {


    @Override
    void delete(VehicleType role);

    long count();
}

2 个答案:

答案 0 :(得分:0)

如果您使用mysql,则必须拥有InnoDB Engine。 第二,问题可能是你在本地电脑上测试。 取消注释my.ini default_tmp_storage_engine = MYISAM ;创建新表时将使用的默认存储引擎 ;默认存储引擎= MYISAM ;如果skip-innodb启用,则为MySQL 5.6的新功能default_tmp_storage_engine default_tmp_storage_engine = MYISAM

答案 1 :(得分:0)

默认情况下将事务设置为回滚状态的唯一例外是未经检查的异常(如RuntimeException)。

请注意,默认情况下,Spring Framework的事务基础结构代码仅在运行时未经检查的异常情况下标记事务以进行回滚;也就是说,抛出的异常是RuntimeException的实例或子类。 (错误也将 - 默认情况下 - 导致回滚。)从事务方法抛出的已检查异常不会导致事务回滚。