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

上一篇: Does Spring Data REST support JPA @Version?

下一篇: Size of images in imageview android