为了账号安全,请及时绑定邮箱和手机立即绑定

JPA:冗余保存反模式

JPA:冗余保存反模式

慕妹3146593 2021-12-22 20:32:23
所以我有这个方法:@Transactionalpublic void savePostTitle(Long postId, String title) {    Post post = postRepository.findOne(postId);    post.setTitle(title);}根据这篇文章:save 方法没有任何用处。即使我们删除它,Hibernate 仍然会发出 UPDATE 语句,因为实体是被管理的,并且只要当前运行的 EntityManager 处于打开状态,任何状态更改都会传播。并且确实发出了更新语句,但是如果我在没有@Transactional注释的情况下运行该方法:public void savePostTitle(Long postId, String title) {        Post post = postRepository.findOne(postId);        post.setTitle(title);    }Hibernate 不会发出更新语句,因此必须postRepository.save(post);显式调用。@Transactional在这个特定场景中使用与不使用有什么区别?
查看完整描述

1 回答

?
浮云间

TA贡献1829条经验 获得超4个赞

在标准配置中,持久化上下文的范围绑定到事务。

如果您没有通过注释定义的显式事务,则您的(不存在的)事务仅跨越对数据库的读取调用。之后,刚刚加载的实体不受管理。这意味着不会跟踪或保存对其的更改。刷新无济于事,因为没有跟踪任何更改。


查看完整回答
反对 回复 2021-12-22
  • 1 回答
  • 0 关注
  • 175 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号