在工作中,我们正在开发一个RESTful应用程序,其中数据层将由Hibernate处理.但我们不确定如何处理实体更新.
我们计划做以下事情:
1)客户端通过id请求实体
2)Hibernate加载实体,请求的字段(总是带有版本)被复制到转换为JSON并发送到客户端的DTO
3)客户端管理一些字段并发送实体(与版本号)回到服务器.
4)服务器接收转换为DTO的JSON.
5)从Hibernate加载相应的实体,并将DTO的道具复制到实体.
=>即使设置了客户端的版本号,也始终会覆盖实体.这是否意味着我们总是必须自己检查客户端的版本号与已加载实例的版本号,而不是Hibernate这样做?
在具有会话的常规应用程序中,分离的实例保存在HttpSession中.每当客户端更新实体时,都会从HttpSession中检索实例,并更新一些属性.每当Hibernate提交更新时,如果版本号是<当前版本号,则抛出ObjectStaleException.
这里的问题是我们没有任何Http会话,因为我们试图成为RESTful.
是否有一个通用的解决方案来处理RESTful应用程序中的乐观锁定,而不是自己检查版本号?