您可以将 JPA 配置为在乐观并发中使用 @Version 的 UUID

Can you configure JPA to use a UUID for @Version in optimistic concurrency

有没有办法配置或覆盖 JPA @Version 注释以使用字符串 (UUID)?

我有一个使用 int 的乐观并发的简单示例

int version

@Version
Public Integer getVersion ()
    return version;
...

我们需要考虑使用 GUID 来进行版本控制(目前保存在 Postgres 数据库中,作为字符变化 100)。

老实说,我的示例不久前就开始工作了,但还没有深入研究。我的第一次尝试是在黑暗中充满希望的一枪 -

String version

@Version @GeneraedValue(generator="system-uuid")
Public String getVersion ()
    return version;
...

基本上我认为这是将 UUID 用作主键的方式。我想如果这行得通,他们会记录下来的!

我确定我听说过这是可能的,尽管我最初的谷歌搜索没有找到任何结果,所以我想我会问问以前是否有人这样做过或者可以指出我的方向粗略的方法(我假设它会比我的简单尝试更深入)?

不,JPA 规范不允许这样做。基于时间或基于数字。而且您肯定永远不会有一个生成策略,因为这是针对 PK 的,并且版本是由 JPA 提供者直接分配的。

来自 @Version

的 javadoc

The following types are supported for version properties: int, Integer, short, Short, long, Long, java.sql.Timestamp.