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

问题描述 投票:1回答:2
@Transactional(rollbackFor = Exception.class) 
public void foo1() {
    `/**Some Code**/`
}

@Transactional(propagation=Propagation.REQUIRED)
public void foo2() {
    `/**Some Code**/`
}
java spring hibernate spring-boot java-ee
2个回答
2
投票

@Transactional(propagation=Propagation.REQUIRED)@Transactional(rollbackFor = Exception.class)大致相同。由于propagation=Propagation.REQUIREDthe default。因此,考虑到这一点,他们相当于@Transactional(propagation=Propagation.REQUIRED)@Transactional(propagation=Propagation.REQUIRED, rollbackFor = Exception.class)

唯一的区别是,如果没有rollbackFor = Exception.class,它将仅针对RuntimeExceptions和Error回滚,而不是针对发生的其他异常。 (当使用EJB时​​,这与JEE相同,并且行为也已转换为Spring)。

这也在javadoc of @Transactional中有所解释。


1
投票

首先,默认情况下,如果你写或不写,propagation总是存在。如果你编写rollbackFor,那么如果发生异常,事务将回滚。

这是一个更多帮助的链接:@Transactional

© www.soinside.com 2019 - 2024. All rights reserved.