我有一个简短的问题:
我需要repo.save(x)调用@Transactional方法吗?
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? }
我只是不确定,所以也许有人可以阐明这个话题?
如果您检索实体,例如findOne在事务方法中使用方法调用,则持久化提供者从此刻开始对其进行 管理 。
findOne
现在,如果您对该实体(实际上是代理对象)进行了任何更改,则在提交事务后,无论是否调用saveor update方法,这些更改都将保存到数据库中。
save
update
save或persist在从头创建新实体且持久性提供程序尚不知道其存在时必须使用。
persist
请记住,如果在更改发生之前在特定实体上使用detach或evict方法,则可以防止在提交时进行任何更改。
detach
evict