所以我有这个方法:
@Transactional
public void savePostTitle(Long postId, String title) {
Post post = postRepository.findOne(postId);
post.setTitle(title);
}
根据此post:
保存方法没有任何作用。即使我们删除它,休眠 由于实体是受管理的,因此仍然会发出UPDATE语句,并且 只要当前正在运行,任何状态更改都将传播 EntityManager已打开。
确实发出了update语句,但是如果我运行的方法没有@Transactional
批注:
public void savePostTitle(Long postId, String title) {
Post post = postRepository.findOne(postId);
post.setTitle(title);
}
Hibernate不会发出更新语句,因此必须显式调用postRepository.save(post);
。
在这种特定情况下,是否使用@Transactional
有什么区别?
答案 0 :(得分:2)
在标准配置中,持久性上下文的范围绑定到事务。
如果您没有通过注释定义的显式事务,则您(不存在的)事务仅涉及对数据库的读取调用。 之后,不管理刚刚加载的实体。 这意味着将不会跟踪或保存对其所做的更改。 刷新无济于事,因为没有跟踪更改。