Spring boot Spring使用save更新所有实体
各位早上好,, 我试图通过其id完全更新实体,我使用的是一个从JPA扩展而来的存储库,我认为只要让它保存系统,它就会粉碎旧的系统,但事实并非如此,我得到了以下错误:Spring boot Spring使用save更新所有实体,spring-boot,hibernate,jpa,repository,Spring Boot,Hibernate,Jpa,Repository,各位早上好,, 我试图通过其id完全更新实体,我使用的是一个从JPA扩展而来的存储库,我认为只要让它保存系统,它就会粉碎旧的系统,但事实并非如此,我得到了以下错误: org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect) 我已经尝试使用entityManager.flush();但我有一个
org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect)
我已经尝试使用entityManager.flush();但我有一个错误:
javax.persistence.TransactionRequiredException: No EntityManager with actual transaction available for current thread - cannot reliably process 'flush' call
我已经找到了更新数据库字段的选项,但我真正想要的是完全粉碎数据库行,有那么复杂吗?我该怎么做?我应该删除记录并重新创建它吗?(我不相信,因为我们正在生成两个过渡,但我不知道这是否正常)
我将负责修改实体的代码放入:
@PostMapping ("/ user")
public ResponseEntity postUser (@RequestBody User user) {
Map <Object, Object> model = new HashMap <> ();
entityManager.flush ();
User newUSer = userRepository.saveAndFlush (user);
model.put ("user", newUSer);
return ok (model);
}
@PostMapping(“/user”)
公共响应姿态(@RequestBody User){
Map model=newhashmap();
entityManager.flush();
User newUSer=userRepository.saveAndFlush(用户);
model.put(“用户”,newUSer);
返回ok(型号);
}
谢谢大家! 好的,在一些测试帐户之后,我找到了如何使其正确工作的方法,我做了一些错误的事情,因为当我编写此代码时,我得到了正确的结果:
@PostMapping ("/ user")
public ResponseEntity postUser (@RequestBody User user) {
Map <Object, Object> model = new HashMap <> ();
AtomicReference <ResponseEntity> responseEntity = new AtomicReference <> ();
Optional <User> optionalUser = Optional.of (userRepository.findById (user.getId ()). Get ());
OptionalConsumer.of (optionalUser) .ifPresent (u -> {
u.setPassword (user.getPassword ());
userRepository.save (u);
model.put ("user", u);
responseEntity.set (ok (model));
}). ifNotPresent (() -> responseEntity.set (notFound (). build ()));
return responseEntity.get ();
}
@PostMapping(“/user”)
公共响应姿态(@RequestBody User){
Map model=newhashmap();
AtomicReference responseEntity=新的AtomicReference();
Optional optionalUser=Optional.of(userRepository.findById(user.getId()).Get());
OptionalConsumer.of(optionalUser).如果存在(u->{
u、 setPassword(user.getPassword());
userRepository.save(u);
model.put(“用户”,u);
responseEntity.set(正常(模型));
}).ifNotPresent(()->responseEntity.set(notFound().build());
returnresponseEntity.get();
}
所以我要做的是在用户模型中创建一个merge方法来修改参数传递的数据并正确保存(我有更好的方法,可能有更多推荐的方法,请告诉我!)