@Transactional(rollbackFor = Exception.class) 读以提交
时间: 2023-10-28 10:59:31 浏览: 87
读已提交(Read Committed)是一种数据库事务隔离级别,它确保一个事务只能读取到已经提交的数据。在该隔离级别下,一个事务不会读取到其他并发事务中未提交的数据,从而避免了脏读(Dirty Read)和不可重复读(Non-repeatable Read)的问题。
在使用 @Transactional 注解时,可以通过设置 `isolation` 属性来指定事务的隔离级别。对于读已提交隔离级别,可以使用 `Isolation.READ_COMMITTED`。
同时,通过设置 `rollbackFor` 属性为 `Exception.class`,表示当发生任何异常时都会回滚事务。这样可以确保在出现异常时,之前执行的操作都会被撤销,保持数据的一致性。
需要注意的是,在使用读已提交隔离级别时,仍然可能出现幻读(Phantom Read)的问题。幻读指的是一个事务在相同的查询条件下多次查询时,由于其他并发事务的插入操作导致返回的结果集发生变化。如果需要避免幻读问题,可以考虑使用更高级别的隔离级别,如可重复读(Repeatable Read)或串行化(Serializable)。
相关问题
@Transactional(rollbackFor = Exception.class)与@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)的区别
@Transactional注解用于声明事务,在Spring中常用来保证方法的执行在一个事务内部,以确保数据的一致性和完整性。其中,rollbackFor参数指定哪些异常需要回滚事务,Propagation.REQUIRED指定了方法的事务传播行为。
区别如下:
- @Transactional(rollbackFor = Exception.class):这个注解只指定了回滚的异常类型,而没有指定传播行为,默认传播行为是Propagation.REQUIRED。
- @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class):这个注解指定了方法的事务传播行为和回滚的异常类型。
简单来说,前者只指定了回滚异常类型,而后者不仅指定了回滚异常类型,还明确指定了事务的传播行为。
@Transactional(rollbackFor = Exception.class)
在使用注解@Transactional(rollbackFor = Exception.class)时,它可以用于回滚所有的异常,包括RuntimeException及其子类抛出的异常,以及Exception异常。 默认情况下,@Transactional注解只会回滚RuntimeException及其子类抛出的异常。 如果需要回滚Exception异常,可以显式地使用@Transactional(rollbackFor = Exception.class)注解来声明。 所以,如果你在进行增删改操作时,建议使用@Transactional(rollbackFor = Exception.class)来确保在出现任何异常时都能进行回滚操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
阅读全文