我可以使用JPA吗@Version
使用 Spring Data REST?
在 Spring Data REST 1.1.0.M1 中,我可以配置存储库导出器来公开实体 ID,碰巧它也会公开@Version
- 带注释的字段。所以我想如果我尝试PUT
具有旧版本号的实体,我会得到OptimisticLockException
。但这种情况并没有发生。相反,PUT
成功(包括数据更新),只不过版本号始终严格递增,而不是我设置的任何旧版本。
I read here https://stackoverflow.com/questions/2572566/java-jpa-version-annotation我不应该自己设置版本号,因为行为未定义。这就说得通了。但这似乎使得@Version
在我拥有的只是实体的 JSON 表示而不是对实体的引用的情况下,这是无用的:使用 JSON 表示,我需要将版本号发送回服务,该服务最终会调用setVersion()
,这又会导致未定义的行为。
我对情况的理解正确吗?我可以用吗@Version
使用 Spring Data REST?
UPDATE:鉴于 Marten 的回应,我最终使用 JPA 事件来实现乐观锁定功能。我在这里写下了该方法:
http://springinpractice.com/2013/09/14/optimistic-locking-with-spring-data-rest/ http://springinpractice.com/2013/09/14/optimistic-locking-with-spring-data-rest/
我想说不,这与 Spring Data REST 的使用没有太大关系。您已经提到您无法自己设置版本,因为随后发生的事情是未定义的(我自己也有过这种愉快的经历)。在发布普通表单数据并且不在会话中存储当前版本时,您基本上遇到了相同的问题(@SessionAttributes
).
我们最终要做的是编写一个休眠拦截器(我猜现在将是一个侦听器)来执行检查(以便我们可以实际设置版本字段)。这工作起来没有太多问题(但那是大约 6 年前的事了),所以 Hibernate 可能已经改变并且现在的行为可能有所不同。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)