所以我有这个方法:@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个赞
在标准配置中,持久化上下文的范围绑定到事务。
如果您没有通过注释定义的显式事务,则您的(不存在的)事务仅跨越对数据库的读取调用。之后,刚刚加载的实体不受管理。这意味着不会跟踪或保存对其的更改。刷新无济于事,因为没有跟踪任何更改。
添加回答
举报
0/150
提交
取消