Java 如果保存方法引发异常,则Spring数据JPA回滚

Java 如果保存方法引发异常,则Spring数据JPA回滚,java,jpa,Java,Jpa,问题已解决:转到最后一个条目 如果crudepository的save方法引发了任何异常,我将尝试测试我的方法的回滚函数。我有一个主循环,它扫描我的文件,然后为每一行在表中插入一条记录。我意识到,当发生任何异常时,循环中断,但回滚操作不起作用。我错过了什么?提前谢谢 主代码 存储库 501之后。插入记录时,我抛出了一个异常。尝试使用下一步: @Transactional(rollbackFor = Exception.class) // your exception 以上就是答案。我在这里发现

问题已解决:转到最后一个条目

如果crudepository的save方法引发了任何异常,我将尝试测试我的方法的回滚函数。我有一个主循环,它扫描我的文件,然后为每一行在表中插入一条记录。我意识到,当发生任何异常时,循环中断,但回滚操作不起作用。我错过了什么?提前谢谢

主代码 存储库 501之后。插入记录时,我抛出了一个异常。

尝试使用下一步:

@Transactional(rollbackFor = Exception.class) // your exception
以上就是答案。我在这里发现:
编辑:我解决了这个问题。我删除了openExcel函数顶部的@PostConstruct注释。然后使用ExcelReaderBean和主类中的applicationContext.getBean方法。现在一切都很好。我不再需要为@Transactional注释使用任何参数

@SpringBootApplication
@EnableConfigurationProperties({FileProperties.class, TargetProperties.class})
public class Application {
    public static void main(String[] args) {

        ApplicationContext applicationContext = SpringApplication.run(Application.class, args);

        ExcelReader excelReader = applicationContext.getBean(ExcelReader.class);
        try {
            excelReader.openExcel();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

不要用事务性注释PostConstruct方法。相反,在应用程序上下文启动后调用另一个bean的事务方法。假设弹簧启动,从这里开始:这是不正确的。运行时异常会导致自动回滚。这是不正确的。运行时异常会导致自动回滚。是的,这就是为什么我在附近添加了一条注释,但忘了说这应该是一个选中的异常用户抛出的异常不是选中的异常。这是一个运行时异常。运行时异常会导致自动回滚。因此,添加rollboor=Exception.class是无用的。如果OP希望所有检查过的异常都导致回滚,并且该方法是从另一个bean调用的,那么这将非常有用!谢谢:
@Entity
@Table(name = "xxx_berkin_city2city", schema = "CRANE_AT", catalog = "")
public class City2CityEntity {
   //getter setters and fields
}
@Transactional(rollbackFor = Exception.class) // your exception
@Transactional(rollbackFor = Exception.class)
@SpringBootApplication
@EnableConfigurationProperties({FileProperties.class, TargetProperties.class})
public class Application {
    public static void main(String[] args) {

        ApplicationContext applicationContext = SpringApplication.run(Application.class, args);

        ExcelReader excelReader = applicationContext.getBean(ExcelReader.class);
        try {
            excelReader.openExcel();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}