spring - Spring Data REST 是否支持 JPA @Version?

标签 spring jpa spring-data-rest

我可以使用 JPA @Version使用 Spring Data REST?

在 Spring Data REST 1.1.0.M1 中,我可以配置 repo 导出器来公开实体 ID,它碰巧也公开了 @Version -带注释的字段。所以我想如果我尝试 PUT具有一些旧版本号的实体,我会得到 OptimisticLockException .但这不会发生。取而代之的是 PUT成功(包括数据更新),除了版本号始终严格递增而不是我设置的任何旧版本。

我读了 here我不应该自己设置版本号,因为行为是未定义的。那讲得通。但这似乎使@Version在我只有实体的 JSON 表示而不是对实体的引用的情况下没用:使用 JSON 表示我需要将版本号发送回服务,最终会调用 setVersion() ,进而导致未定义的行为。

我是否正确理解了情况?我可以用@Version使用 Spring Data REST?

更新:鉴于 Marten 的回应,我最终使用 JPA 事件来实现乐观锁定功能。我在这里写了方法:

http://springinpractice.com/2013/09/14/optimistic-locking-with-spring-data-rest/

最佳答案

我会说不,这与 Spring Data REST 的使用没有太大关系。你已经提到你不能自己设置版本,因为那时发生的事情是未定义的(我自己也有过这种愉快的经历)。在发布普通表单数据并且不在 session 中存储当前版本时,您基本上会遇到同样的问题( @SessionAttributes )。

我们最终做的是我们编写了一个休眠拦截器(我猜现在应该是一个监听器)来进行检查(以便我们可以实际设置版本字段)。这工作没有太多问题(但那是大约 6 年前),所以 Hibernate 可能已经改变并且现在可能表现不同。

关于spring - Spring Data REST 是否支持 JPA @Version?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18780621/

相关文章:

java - quartz 我如何将 JobExecutionContext 和 Scheduler 的范围更改为类级别?

java - Spring quartz : Job does not fire

java - 容器管理的事务不能回滚

java - 有没有办法在没有投影的情况下在spring数据rest中返回带有id的关联对象

java - Spring MVC 是否支持无扩展 URL?

java - SPRING MVC,将ENUM插入SQL表并在JSP页面中有ENUM的下拉列表

java - hibernate/JPA : Map a legacy database Not Null Foreign Key 'Dummy' value as NULL

java - 无法打开 JPA EntityManager 进行事务;嵌套异常是 java.lang.NoSuchMethodError - Spring-Starter-JPA

java - 如何使用 Spring Data REST 在 OneToMany 关系中添加对象

rest - 可选择在 Spring Data Rest 中禁用 HATEOAS 格式