使用json响应处理hibernate @Version列的正确方法

时间:2014-01-03 11:05:48

标签: json spring hibernate spring-mvc jackson

以下代码用于更新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);
}

2 个答案:

答案 0 :(得分:1)

这不应该是@Transactional吗?你的服务方式我的意思是?由于事务注释是一个返回后的建议。当实体退出最外层的交易时,它会刷新实体。这也应该更新@Version号码。

答案 1 :(得分:0)

在休眠会话上调用flush()。这会将挂起的更改写入数据库并增加版本号。