自从我发布这个问题以来已经有一段时间了,但我已经弄清楚了。我将解释我所做的事情,以便对其他人有所帮助。
注解@Version是一个javax.persistence接口,而不是我之前提到的spring-data rest jpa框架。
如果您想使用@Version,您需要在您的域对象中创建一个版本字段,如下所示:
@Version
@Column(name = "VERSION")
private long version;
如果您使用的是休眠,它会自动获取注释并在您的(在我的情况下为 MySql)表中创建一个“版本”列。每次更新记录时,hibernate 都会将计数器加 1。
现在为什么这是你想要的东西?那么您可能想要使用它的原因是因为它降低了您的客户与stale data 合作的机会。每当客户从您那里检索信息时,都会提供带有他请求的数据的版本。例如
{ <-- 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。现在,如果该行已更新,则意味着您提供了正确的版本,并且在您请求信息、更改信息并将其发回之间,没有其他人更改过该特定信息。不错吧?
如果行没有更新怎么办?这意味着在您请求信息后,当您快速上厕所时,其他人更新了该行。这意味着您的版本已过时!现在需要发生的事情实际上是特定于用例的,所以我不会对此进行详细说明
希望有人可以使用这条信息!