ren*_*ena 5 java hibernate jpa spring-data-jpa
所以我有这个方法:
@Transactional
public void savePostTitle(Long postId, String title) {
Post post = postRepository.findOne(postId);
post.setTitle(title);
}
Run Code Online (Sandbox Code Playgroud)
根据这篇文章:
save 方法没有任何用处。即使我们删除它,Hibernate 仍然会发出 UPDATE 语句,因为实体是被管理的,只要当前运行的 EntityManager 处于打开状态,任何状态更改都会传播。
并且确实发出了更新语句,但是如果我在没有@Transactional注释的情况下运行该方法:
public void savePostTitle(Long postId, String title) {
Post post = postRepository.findOne(postId);
post.setTitle(title);
}
Run Code Online (Sandbox Code Playgroud)
Hibernate 不会发出更新语句,因此必须postRepository.save(post);显式调用。
@Transactional在这个特定场景中使用与不使用有什么区别?
在标准配置中,持久性上下文的范围绑定到事务。
如果您没有通过注释定义显式事务,则您的(不存在的)事务仅跨越对数据库的读取调用。之后,刚刚加载的实体不再被管理。这意味着对其所做的更改不会被跟踪或保存。刷新不会有帮助,因为没有跟踪任何更改。
| 归档时间: |
|
| 查看次数: |
839 次 |
| 最近记录: |