Spring JpaRepository - Detach and Attach entity
2022-09-01 02:25:49
我正在使用弹簧靴并在jpa上休眠。我正在使用JpaRepository接口来实现我的存储库。与以下用户存储库一样
public interface UserRepository extends JpaRepository<User, Long> {
}
我想实现以下目标
- 加载用户实体。
- 更改实体对象的状态,例如 user.setName(“foo”)
- 执行外部系统 Web 服务调用。将调用结果保存在数据库中
- 只有在成功响应此 Web 服务调用后,才将用户的新状态保存在存储库中。
上述所有步骤都不会发生在一个事务中,即外部服务调用不在事务中。
当我通过其存储库将 Web 服务结果保存到 DB 中时,我在 User 实体中的更改也会被保存。根据我的理解,这是由于在步骤#3中底层的持久性上下文的冲洗。经过一些谷歌,我认为我可以实现我的目的,如果我可以在步骤一中分离我的用户实体,并在步骤4中重新附加它。请确认我的理解是否正确,我如何才能做到这一点?JpaRepository 接口中没有分离实体的方法。
下面是要说明的代码
public void updateUser(int id, String name, int changeReqId){
User mUser = userRepository.findOne(id); //1
mUser.setName(name); //2
ChangeRequest cr = changeRequestRepository.findOne(changeReqId);
ChangeResponse rs = userWebService.updateDetails(mUser); //3
if(rs.isAccepted()){
userRepository.saveAndFlush(mUser); //4
}
cr.setResponseCode(rs.getCode());
changeRequestRepository.saveAndFlush(cr); //this call also saves the changes at step 2
}
谢谢