@Transactional(rollbackFor=Exception.class)及spring boot使用jpa的@Modify的clearAutomatically=true的作用

    @Modifying(clearAutomatically = true)
    @Transactional(rollbackFor = Exception.class)
    @Query("update User set name=:name, age=:age where id=:id") 
    void updateUserInfo(@Param("name") String name, @Param("age") Integer age, @Param("id") Integer id);

注意:在使用@Modifying注解时,如果忘了加 @Transactional注解可能会报错

@Modify注解
可以清除底层持久化上下文,就是entityManager这个类,jpa底层实现会有二级缓存,也就是在更新完数据库后,如果后面去用这个对象,再去查这个对象,这个对象是在一级缓存,但是并没有跟数据库同步,这个时候用clearAutomatically=true,就会刷新hibernate的一级缓存, 不然在同一接口中,更新完一个对象,接着查询这个对象,那么查出来的这个对象还是没更新之前的状态。


@Transactional(rollbackFor=Exception.class),如果类加了这个注解,那么这个类里面的方法抛出异常,就会回滚,数据库里面的数据也会回滚。

注解说明:
在@Transactional注解中如果不配置rollbackFor属性,那么事物只会在遇到RuntimeException的时候才会回滚,加上rollbackFor=Exception.class,可以让事物在遇到非运行时异常时也回滚
使用场景说明:
带 SQL 事务代码得的时候才使用 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值