@Transactional(rollbackFor = Exception.class)
@Override
public R deleteReview(List<String> ids) {}
@Transactional(rollbackFor = Exception.class)
@Override
public R deleteReview(List<String> ids) throws Exception{}
这两种写法的区别在于,第二种写法明确地声明了该方法可能会抛出异常,而第一种写法没有。因此,当代码出现异常时,第一种写法不会回滚事务,而第二种写法会回滚事务。
具体解释如下:
@Transactional 注解表示将该方法标记为一个事务方法。当该方法执行时,如果发生异常,事务会自动回滚,以保证数据的一致性。rollbackFor = Exception.class 表示将所有异常都视为回滚事务的触发条件。
在第一种写法中,方法签名中并没有声明该方法可能会抛出异常,因此代码出现异常时,事务并不会被回滚。这可能会导致数据的不一致性。
而在第二种写法中,方法签名中声明了该方法可能会抛出异常,因此代码出现异常时,事务会被回滚,数据得到了保障。
因此,在使用 @Transactional 注解时,建议明确地声明该方法可能会抛出的异常,以保证事务的正确回滚。