Wil*_*ler 8 spring jpa spring-data-rest
我可以将JPA @Version与Spring Data REST一起使用吗?
在Spring Data REST 1.1.0.M1中,我可以配置repo导出器来公开实体ID,它实际上也暴露了@Version注释字段.所以我想如果我尝试PUT使用旧版本号的实体,我就会得到OptimisticLockException.但这不会发生.相反,PUT成功(包括数据更新),除了版本号总是严格增加,而不是我设置的旧版本.
我在这里读到,我不应该自己设置版本号,因为行为是未定义的.那讲得通.但似乎这使得@Version没用在所有我是一个实体的JSON表示,而不必对实体的引用的情况:用JSON表示我需要发送的版本号回到服务,最终将调用setVersion(),这反过来导致未定义的行为.
我能正确理解这种情况吗?我可以使用@VersionSpring Data REST吗?
更新:鉴于Marten的回应,我最终使用JPA事件来实现乐观锁定功能.我在这里写了这个方法:
http://springinpractice.com/2013/09/14/optimistic-locking-with-spring-data-rest/
我想说不,这与 Spring Data REST 的使用没有太大关系。您已经提到您无法自己设置版本,因为随后发生的事情是未定义的(我自己也有过这种愉快的经历)。在发布普通表单数据并且不在会话 ( @SessionAttributes) 中存储当前版本时,您基本上会遇到相同的问题。
我们最终要做的是编写一个休眠拦截器(我猜现在将是一个侦听器)来执行检查(以便我们可以实际设置版本字段)。这工作起来没有太多问题(但那是大约 6 年前的事了),所以 Hibernate 可能已经改变并且现在的行为可能有所不同。
| 归档时间: |
|
| 查看次数: |
2671 次 |
| 最近记录: |