所以我有這個方法:@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
提交
取消