单个实体Spring Data JPA中的“作为ID的自动生成的PK”和“作为字符串的自动生成的UUID”

时间:2020-06-25 19:46:47

标签: java spring spring-boot hibernate spring-data-jpa

我的问题是对thisthis和我自己的previous question的扩展。

在也加载了其他读数之后,我的实体中包含以下内容:

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;

@Column(name = "useruuid")
@GenericGenerator(name = "uuid", strategy = "uuid4")
private String useruuid;

问题1:以上声明是否有效?我们都知道@Id是肯定的。这个问题更多地集中在@GenericGenerator(name = "uuid", strategy = "uuid4").上,这意味着在已经拥有@GeneratedValue的实体中生成UUID。可以接受吗?我试过了,它有效。

问题2:如果上面的结果是肯定的,那么生成的UUID(字符串)对于整个数据库还是仅对于实体是唯一的?我在这里寻求帮助,因为我将在同一数据库的其余实体中使用相同的模式。

1 个答案:

答案 0 :(得分:1)

是的@GenericGenerator(name = "uuid", strategy = "uuid4")是可以接受的,完全正确。

现在要问第二个问题,生成的UUID在整个数据库中是唯一的。实际上,它是全局唯一的,因此UUID被称为“全局唯一标识符”(GUID)。

除非您多年连续每秒生成十亿个UUID,否则您不会看到两个UUID版本4实现冲突。

阅读:How unique is UUID?

相关问题