为什么spring Data REST会在序列化实体时忽略@javax.persistence.Version字段?

时间:2016-01-07 05:25:24

标签: java spring spring-data spring-data-jpa spring-data-rest

我查看了代码并注意到org.springframework.data.rest.webmvc.json.PersistentEntityJackson2Module。$ AssociationOmittingSerializerModifier.updateBuilder只是跳过了version属性。

对于项目资源,ETag标题中提供了版本字段。 但是对于集合资源,我们需要项目的版本ID以在更新项目时遵循乐观锁定。

我们如何获取集合资源上每个项目的版本ID?我们是否有任何配置来启用此功能?

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

当返回集合资源并且您想要更新集合中的单个项目时,访问该版本尤其方便。

我在实体类中添加了或者命名'getter',它将返回版本:

@Version
private long version;

public long getCurrentVersion()
{
  return version;
}

这会导致序列化程序在返回的JSON中创建currentVersion键,然后将其值作为If-Match标题的值传递。

答案 1 :(得分:0)

你必须手动完成。为了我的目的,这工作正常,因为我在更新之前无论如何加载现有实体,然后从REST实体复制属性。

    if (restEntity.version != null && restEntity.version != existing.version) {
        throw new OptimisticLockingFailureException("version number from REST doesn't match the database")
    }