为什么SpringDataREST在序列化实体时忽略@javax.persistence.Version字段?
我查看了代码,发现org.springframework.data.rest.webmvc.json.PersistentEntityJackson2Module.$AssociationMittingSerializerModifier.updateBuilder只是跳过了version属性 对于项目资源,版本字段在ETag标头中可用。 但是对于集合资源,我们需要项的版本id来在更新项时执行乐观锁定 如何获取集合资源中每个项目的版本id?我们是否有任何配置来启用此功能为什么SpringDataREST在序列化实体时忽略@javax.persistence.Version字段?,java,spring,spring-data,spring-data-jpa,spring-data-rest,Java,Spring,Spring Data,Spring Data Jpa,Spring Data Rest,我查看了代码,发现org.springframework.data.rest.webmvc.json.PersistentEntityJackson2Module.$AssociationMittingSerializerModifier.updateBuilder只是跳过了version属性 对于项目资源,版本字段在ETag标头中可用。 但是对于集合资源,我们需要项的版本id来在更新项时执行乐观锁定 如何获取集合资源中每个项目的版本id?我们是否有任何配置来启用此功能 感谢您的帮助您必须手动操
感谢您的帮助您必须手动操作。出于我的目的,这很好,因为我在更新之前加载现有实体,然后从REST实体复制属性
if (restEntity.version != null && restEntity.version != existing.version) {
throw new OptimisticLockingFailureException("version number from REST doesn't match the database")
}
当返回集合资源并希望更新集合中的单个项时,访问该版本尤其方便 我在entity类中添加了一个名为“getter”的,它将返回版本:
@Version
private long version;
public long getCurrentVersion()
{
return version;
}
这会导致序列化程序在返回的JSON中创建一个
currentVersion
键,然后我将其值作为If Match
头的值传递。看看,它可以帮助您。无论如何,如果您提供一些示例代码,例如您所涉及的实体、您得到的结果和您想要的结果,我们可以详细说明一些具体的解决方案。您是否找到了正确的方法?不幸的是,没有(