Spring 捕获异常的事务回滚不工作

Spring 捕获异常的事务回滚不工作,spring,spring-boot,jpa,spring-data-jpa,transactional,Spring,Spring Boot,Jpa,Spring Data Jpa,Transactional,@当我在catch块中抛出异常时,Transactional不会回滚事务 @Transactional(rollbackFor = MyException.class) public void testTransactional2() throws Exception { try { dao1.save(entity1); dao2.save(entity2); arrayList.get(999999); // intentionally

@当我在catch块中抛出异常时,Transactional不会回滚事务

@Transactional(rollbackFor = MyException.class)
public void testTransactional2() throws Exception {
    try {
        dao1.save(entity1);
        dao2.save(entity2);
        arrayList.get(999999); // intentionally cause an exception
    } catch (IndexOutOfBoundsException e) {
        throw new MyException(ErrorCode.UNABLE_TO_INSERT, e);
    }
}
dao1.save()
dao2.save()
都使用
@Transactional
本身进行注释


当我检查数据库时,我看到两个实体都被持久化。

注意:@Transactional设置为在默认情况下仅在引发未检查的异常时回滚


除了这个remove-your-throws子句之外,还抛出MyException。

从何处调用方法?请参阅:如何调用此方法以及使用哪个数据库。此方法是从同一类中未注释为事务的另一个方法调用的。父方法是从控制器调用的。抛出的异常在那里被捕获,但我已经测试了它,没有捕获到同样的结果。我在上面发布的链接是相关的。我认为在这种情况下,您实际上执行了两个独立的事务-那些在DAO级别定义的事务-因为在服务层定义的事务没有任何效果。如果您是从同一个类调用它,
@Transactional
是无用的。两种保存方法都有2个事务。在同一类上调用代理方法将不起作用,因为它们不会通过代理。我正在从catch块抛出
MyException
,并且
@Transactional
设置为
rollboor=MyException.class
。所以这没问题。