【发布时间】:2023-03-06 07:59:01
【问题描述】:
我有一个简短的问题:
我需要repo.save(x) 调用@Transactional 方法吗?
我问是因为我在没有保存的情况下看到我的数据库上的更改,并且没有阅读关于它的明确文档。
那么它是按预期工作,还是只是(受欢迎的)意外行为?
示例:
@Autowired
private UserRepo repo;
@Transactional
@PutMapping
public Long put(@RequestBody User user)
{
User u = repo.findOne(user.getId());
u.setName("Paul");
repo.save(u); // DO I NEED THIS LINE?
}
我只是不确定,所以也许有人可以对这个主题有所了解?
【问题讨论】:
-
是的,这在托管 (JEE / JTA) 环境中是正常的。每个附加的对象都被保存
-
@YannicKlem 持久化实体在事务刷新时由 Hibernate 保存,因此不需要手动
save()。这在11.5 Modifying persistent objects 中有描述。不知道这是仅在 Hibernate 中的一个特性,还是在 JPA 规范中也有描述。 -
感谢您的澄清。我完全不知道这种行为!
-
谢谢你 :) 清除它
标签: java spring spring-boot jpa spring-data-jpa