@Transactional(rollbackFor = Exception.class)
public void foo1() {
`/**Some Code**/`
}
@Transactional(propagation=Propagation.REQUIRED)
public void foo2() {
`/**Some Code**/`
}
答案 0 :(得分:2)
@Transactional(propagation=Propagation.REQUIRED)
和@Transactional(rollbackFor = Exception.class)
大致相同。 propagation=Propagation.REQUIRED
是the default。因此请牢记,它们等效于@Transactional(propagation=Propagation.REQUIRED)
和@Transactional(propagation=Propagation.REQUIRED, rollbackFor = Exception.class)
。
唯一的区别是,如果没有rollbackFor = Exception.class
,它将仅针对RuntimeException
和Error
进行回滚,而不会发生其他异常。 (对于使用EJB的JEE来说是相同的,并且该行为也已转换为Spring)。
javadoc of @Transactional
中也对此进行了说明。
答案 1 :(得分:1)
首先,默认情况下,无论是否写入,propagation
始终存在。如果您写rollbackFor
,那么如果发生异常,事务将被回滚。
以下是更多帮助的链接:@Transactional
答案 2 :(得分:0)
propagation
和rollbackFor
关注的重点不同,propagation
关心交易如何需要或创建的方式,rollbackFor
关心指定的异常发生时,是否存在的事务会回滚。
请参阅@Propagation docs以获得更多详细信息。
由于默认传播级别为Propagation.REQUIRED
,因此问题中两个注释之间的主要区别在于是否回滚Exception(已检查的Exception)。