大家早上好,我正在尝试完全通过它的id来更新一个实体,我正在使用一个从JPA扩展而来的存储库,我认为只要让它保存系统,就会摧毁旧的系统,但事实并非如此,我得到了这个错误:
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);
}
谢谢!
发布于 2020-11-08 00:46:39
好了,在一些测试帐户之后,我发现了如何让它正确工作,我做了一些错误的事情,因为当我编写这段代码时,我得到了正确的代码:
@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 ();
}
所以我要做的是在用户模型中创建一个merge方法来修改通过参数传递的数据并正确地保存它(我对更好的方法持开放态度,可能会有更多推荐的方法,请告诉我!)
https://stackoverflow.com/questions/64729543
复制相似问题