当前位置: 首页 > 面试题库 >

在spring-data项目中使用@Version

令狐凌
2023-03-14
问题内容

我一直在使用spring-data开发RESTful
Web服务。几天前,发布了一个特殊的spring-data jpa
REST框架。

现在,我注意到可以在此框架中使用@Version了。该版本是自己生成的还是您需要手动执行?

可以单独使用@Version吗?(这样我就不必对现有的存储库/域等进行任何更改。)

我需要做一些额外的配置来使用@Version吗?


问题答案:

自从我发布这个问题已经有一段时间了,但是我已经弄清楚了。我将解释自己的工作,以便对他人有所帮助。

注释@Version是一个javax.persistence接口,而不是我前面提到的spring-data rest jpa框架。

如果要使用@Version,则需要在域对象中创建一个version字段,如下所示:

@Version
@Column(name = "VERSION")
private long version;

如果您使用的是hibernate模式,它将自动提取注释,并在您的表(以MySql为例)中创建一个“版本”行。每次更新记录时,hibernate状态都会使计数器增加1。

现在为什么要这样?嗯,您之所以想使用它,是因为它减少了客户处理陈旧数据的机会。每当客户从您那里检索信息时,就会向他提供他请求的数据的版本。例如

{                       <-- School entity -->
    "id": 1,
    "version": 0,                 
    "name": "De regenboog",
    "street": "Plantaanstraat",
    "number": "2",
    "zipCode": "1234AS",
    "city": "Amsterdam"
}

现在,如果客户想要更改有关此特定记录的某些信息,它将发送新信息以及版本值。在这种情况下,让我们更改学校的名称。

 {                       <-- School entity -->
    "id": 1,
    "version": 0,                 
    "name": "Stackoverflow",
    "street": "Plantaanstraat",
    "number": "2",
    "zipCode": "1234AS",
    "city": "Amsterdam"
 }

Hibernate提供了一个查询您的信息,并添加了一个额外的“ where”子句来检查版本。update .... where id = 1 and version = 0。现在,如果该行已更新,则意味着您提供了正确的版本,并且在您请求信息,更改信息并将其发送回之间,没有其他人更改过该特定信息。不错吧?

现在,如果该行未更新怎么办?这意味着在您请求信息后,在您快速洗手间时,其他人更新了该行。这意味着您的版本已过时!现在需要发生的事情实际上是特定于用例的,因此我将不赘述:)

希望有人可以使用此信息!

谢谢大家



 类似资料:
  • 问题内容: Spring Data REST仅自动公开域对象。但是大多数情况下,我们必须处理数据传输对象。那么如何以SDR方式做到这一点呢? 问题答案: Entities 实体必须实现Identifiable接口。例如: Projections 创建一个投影接口,存储库查询方法将返回: 这将是DTO的基础。在此示例中,DTO将代表a Category,而 的数量属于它。 Repository me

  • Spring Data REST只自动公开域对象。但大多数情况下,我们必须处理数据传输对象。那么如何用SDR的方式做到这一点呢?

  • 下面是我的MongoDB查询 下面是我的SpringData mongo API 我想知道如何使用Spring API在项目聚合中使用$eq。我试着把比赛放到项目之外,如下所示。但查询并没有获取任何记录。因此,我使用$eq在项目中进行比较,并将结果分配到一个新的项目属性中,并在项目管道之外进行检查。 {$匹配:{$organization.roles.orgRoleId","$userOrgMap

  • 我创建了这个测试项目,由两个项目组成:一个使用spring-boot,一个使用Spring-MVC。它们中的每一个单独工作都很好。我想要做的是运行spring-boot,并能够通过加载spring-mvc项目的上下文来访问该项目的web页面。这个项目很简单,因为我只是想测试如何做混合。 问题是,当我运行spring-boot应用程序时,来自spring-mvc的页面无法访问,因为它没有在构建中添加

  • 如何在某个存储库中使用任意sql查询(我指的是本机sql查询)?我的实际问题是: 还有我的存储库,它使用HAL json表示公开了漂亮的crud接口。我试图通过一些投影/视图来丰富它,特别是由于web UI在单个请求中加载一页数据。我知道一些例外和预测,但它们似乎不够强大。 我也尝试过使用JPQL,但在使用fetch-join时遇到了问题(因为我不熟悉JPQL)。我上次的评估查询是这样的: 我想获

  • 我一直在用SpringBoot+Spring Data JPA编写我的第一个项目。我使用MySql作为我的数据库提供程序。我对春靴和冬眠有点陌生。 我遵循了http://blog.netgloo.com/2014/10/27/using-mysql-in-spring-boot-via-spring-data-jpa-and-hibernate/提供的教程。 在我的项目中,没有任何配置文件。我需要