1.非 public 修饰的方法
当 @Transactional 修饰的方法为非 public 时,事务就失效了,比如以下代码当遇到异常之后,不能自动实现回滚:
此时表显示这条记录更新为0.31了,事务失效
同理,方法用final或statsic修饰,事务也是不生效的,因为在它的代理类中,就无法重写该方法,而添加事务功能
2.timeout 超时
当在 @Transactional 上,设置了一个较小的超时时间时,如果方法本身的执行时间超过了设置的 timeout 超时时间,那么就会导致本来应该正常更新数据的方法执行失败,示例代码如下:
正常应该更新为0.31,但是由于事务超时,导致没有更新成功,如下所示: