小编典典

SpringBoot JPA不需要@Transactional上的.save()吗?

spring-boot

我有一个简短的问题:

我需要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?
}

我只是不确定,所以也许有人可以阐明这个话题?


阅读 1007

收藏
2020-05-30

共1个答案

小编典典

如果您检索实体,例如findOne在事务方法中使用方法调用,则持久化提供者从此刻开始对其进行 管理

现在,如果您对该实体(实际上是代理对象)进行了任何更改,则在提交事务后,无论是否调用saveor update方法,这些更改都将保存到数据库中。

savepersist在从头创建新实体且持久性提供程序尚不知道其存在时必须使用。

请记住,如果在更改发生之前在特定实体上使用detachevict方法,则可以防止在提交时进行任何更改。

2020-05-30