开发者社区> 问答> 正文

@Transactional自动提交变更数据:操作报错

@Transactional 
public void changeName(List nameList){ 
   for(String name:nameList){ 
        List userList = dao.getUserByName(name);
        for(User u:userList){ 
          u.setName("aa"); 
        } 
   } 
}
 //当第一次循环更改了一次name 第二资循环得到userList的时候事务竟然更新了第一次更改的User name而我并没有 //用dao.update(u)也就是我没有进行更新操作,事务自动将其进行了更新,这是为什么。

展开
收起
kun坤 2020-06-04 13:20:43 739 0
1 条回答
写回答
取消 提交回答
  • @Transactional 的 readOnly 属性默认是false 表示会做数据更新.
    假设你底层的Jpa provider用的是Hibernate. Hibernate 在第一级缓存(Session)会自动检测对象的改动,然后触发一个update的调用(导致数据被更新).
    如果你不想触发更新改动可以把 @Transactional 的 readOnly 属性设置为true.
    ######谢谢!!

    2020-06-05 14:25:37
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
面向失败设计 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载