Spring Data REST是否支持JPA @Version?
我可以在Spring Data REST中使用JPA @Version
吗?
在Spring Data REST 1.1.0.M1中,我可以配置repo导出器来公开实体ID,因为它发生时也会暴露@Version
字段。 所以我认为,如果我尝试使用某个旧版本号的PUT
,我会得到OptimisticLockException
。 但那不会发生。 相反, PUT
成功(包括数据更新),除了版本号总是严格递增,而不是我设置的任何旧版本。
我在这里读到,我不应该自己设置版本号,因为行为是未定义的。 这就说得通了。 但是,这似乎使@Version
在我所拥有的只是实体的JSON表示的情况下没有用处,而不是具有对实体的引用:使用JSON表示我需要将版本号发送回服务,最终会调用setVersion()
,这反过来导致未定义的行为。
我是否正确了解情况? 我可以在Spring Data REST中使用@Version
吗?
更新:鉴于Marten的回应,我最终使用JPA事件来实现乐观锁定功能。 我在这里写下了这个方法:
http://springinpractice.com/2013/09/14/optimistic-locking-with-spring-data-rest/
我会说不,这与使用Spring Data REST没有多大关系。 你已经提到你不能自己设置版本,因为发生了什么然后是未定义的(我自己也有这个愉快的经历)。 发布常规表单数据并且不将当前版本存储在会话中时( @SessionAttributes
)基本上存在相同的问题。
我们最终做的是我们编写了一个hibernate拦截器(现在我猜是一个监听器),它执行检查(以便我们可以真正设置版本字段)。 这工作没有太多问题(但大约6年前),所以Hibernate可能已经改变,现在可能会有不同的表现。
链接地址: http://www.djcxy.com/p/15851.html