Spring @Transactional(rollboor=Exception.class)和@Transactional(propagation=propagation.REQUIRED)之间有什么区别

Spring @Transactional(rollboor=Exception.class)和@Transactional(propagation=propagation.REQUIRED)之间有什么区别,spring,hibernate,spring-boot,Spring,Hibernate,Spring Boot,首先,默认情况下,无论您是否编写,传播始终存在。如果将rollback写入,则如果发生异常,事务将回滚 这里有一个更多帮助的链接:首先,默认情况下,无论您是否编写,传播始终存在。如果将rollback写入,则如果发生异常,事务将回滚 以下是更多帮助的链接:@Transactional(传播=传播.必需)和@Transactional(rollboor=Exception.class)大致相同。Aspropagation=propagation.REQUIREDis。因此,考虑到这一点,它们相当于

首先,默认情况下,无论您是否编写,传播始终存在。如果将
rollback写入
,则如果发生异常,事务将回滚


这里有一个更多帮助的链接:

首先,默认情况下,无论您是否编写,传播始终存在。如果将
rollback写入
,则如果发生异常,事务将回滚

以下是更多帮助的链接:

@Transactional(传播=传播.必需)
@Transactional(rollboor=Exception.class)
大致相同。As
propagation=propagation.REQUIRED
is。因此,考虑到这一点,它们相当于
@Transactional(propagation=propagation.REQUIRED)
@Transactional(propagation=propagation.REQUIRED,rollboor=Exception.class)

唯一的区别是,如果没有
rollboor=Exception.class
,它将仅针对
RuntimeException
s进行回滚,而
Error
s不会针对发生的其他异常进行回滚。(这与JEE在使用EJB时的情况相同,行为也已转换为Spring)

这一点也在本文中进行了解释

@Transactional(propagation=propagation.REQUIRED)
@Transactional(rollboor=Exception.class)
大致相同。As
propagation=propagation.REQUIRED
is。因此,考虑到这一点,它们相当于
@Transactional(propagation=propagation.REQUIRED)
@Transactional(propagation=propagation.REQUIRED,rollboor=Exception.class)

唯一的区别是,如果没有
rollboor=Exception.class
,它将仅针对
RuntimeException
s进行回滚,而
Error
s不会针对发生的其他异常进行回滚。(这与JEE在使用EJB时的情况相同,行为也已转换为Spring)


这一点也在本文中进行了解释

传播
回滚
关注的是不同的,
传播
关注事务需要或创建的方式
回滚
关注在指定异常发生时现有事务是否回滚

有关详细信息,请参阅


由于默认的传播级别是
propagation.REQUIRED
,因此在您的问题中,两个注释之间的主要区别在于是否回滚异常(选中的异常)。

什么是
propagation
rollboor
重点不同,
传播
关心事务需要或创建的方式
回滚
关心指定异常发生时现有事务是否回滚

有关详细信息,请参阅


由于默认的传播级别是
propagation.REQUIRED
,因此问题中两个注释之间的主要区别在于是否回滚异常(选中异常)或者不存在。

Propagation.REQUIRED->当前事务将被使用,如果不存在则创建一个新事务。rollboor=Exception.class->表示如果在事务期间抛出“Exception.class”或任何其他扩展该类的事务,则整个事务将被回滚。如果不进行任何更改,则将使用propagation.REQUIRED->当前事务或创建新事务(如果不存在)。rollbackFor=Exception.class->表示如果在事务期间抛出“Exception.class”或任何扩展该类的其他事务,则将回滚整个事务。没有任何改变,我相信迪纳姆先生的答案是这个问题的合适答案()@PrasanthRajendran他说的是对的,但是更多的事情可以通过组合来完成我相信迪纳姆先生的答案是这个问题的合适答案()@PrasanthRajendran他说的是对的,但是更多的事情可以通过组合来完成
@Transactional(rollbackFor = Exception.class) 
public void foo1() {
    `/**Some Code**/`
}

@Transactional(propagation=Propagation.REQUIRED)
public void foo2() {
    `/**Some Code**/`
}