以下代码用于更新Account
hibernate对象。问题是该帐户有一个版本列@Version
。 Hibernate将自动更新合并的帐户,但似乎在响应被序列化为json后会发生这种情况。因此,如果帐户再次更新,我会收到StaleObjectStateException
,因为发送回客户端的版本是原始版本。我意识到我可以在发回之前手动更新对象,但有更好的选择吗?
@RequestMapping(value = "/accounts/{1}",
produces = MediaType.APPLICATION_JSON_VALUE,
method = RequestMethod.PUT)
@ResponseBody
@ResponseStatus(value = HttpStatus.OK)
public final Account update(@RequestBody final Account account) {
return accountSerivice.merge(account);
}
答案 0 :(得分:1)
这不应该是@Transactional吗?你的服务方式我的意思是?由于事务注释是一个返回后的建议。当实体退出最外层的交易时,它会刷新实体。这也应该更新@Version号码。
答案 1 :(得分:0)
在休眠会话上调用flush()
。这会将挂起的更改写入数据库并增加版本号。