spring-data-jpa SpringBoot JPA在@Transactional?[重复]上不需要.保存()

i34xakig  于 2022-11-10  发布在  Spring
关注(0)|答案(1)|浏览(171)

此问题在此处已有答案

Transactional saves without calling update method(5个答案)
五年前就关门了。
我有个简短的问题:
是否需要对@Transactional方法进行repo.save(x)调用?
我问,因为我看到我的数据库上的变化没有保存,并没有阅读有关它的清晰的文档。
那么,它是按预期工作,还是只是一个(受欢迎的)意外行为?
例如:

@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?
}

我只是不确定,所以也许有人可以在这个问题上提供一些线索?

zaqlnxep

zaqlnxep1#

如果检索实体(例如,使用事务方法中的findOne方法调用),则从该点起,该实体已由持久性提供程序托管
现在,如果您对该实体(实际上是一个代理对象)进行了任何更改,则在事务提交时,这些更改将持久保存到数据库中,而不管是否调用saveupdate方法。
如果从头开始创建新实体,并且持久性提供程序尚不知道其存在,则必须使用savepersist
请记住,如果在更改发生之前对特定实体使用detachevict方法,则可以防止在提交时进行任何更改。

相关问题