【发布时间】:2015-11-15 23:45:57
【问题描述】:
我需要在 Spring 中使用 Annotations 生成两个 ID(列值)。 如果我需要使用注释自动生成 2 个 ID,ID 和 UUID,我会使用以下生成的 UUID:
@Id
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid2")
@Column(name = "uuid", unique = true)
private String uuid;
但是我不能同时使用@Id注解并且不能自动生成ID(第二个生成的字段)
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private long id;
什么是自动生成两列 ID 和 UUID 的最佳解决方案,因为只有一个 @Id 只创建一个而另一个为空? 我需要一些 Hibernate 解决方案,而不是以编程方式生成其中之一。
【问题讨论】:
-
您不需要 Hibernate 或数据库的帮助来生成 UUID。你为什么不自己做,以编程方式? docs.oracle.com/javase/8/docs/api/java/util/UUID.html。另外,为什么在一个实体中需要两个不同的技术 ID?
-
即使有两次相同的 UUID 的机会也不太可能发生,所以我认为让 Hibernate 生成两个 ID 是最好的解决方案。由于设计原因,我需要在一个实体中使用两个不同的 ID。你知道用 Hibernate 创建这两个 ID 的解决方案吗?
-
那么,UUID 会检查谁试图生成它,检测它是 Hibernate,因此要格外小心不要生成重复?如果它不是 Hibernate,它不会在乎吗? “因为设计”是一个重言式。你为什么选择这样设计它是个问题。有没有人用枪指着你的头强迫你这样做?这种设计选择背后的基本原理是什么?
-
感谢@JB Nizet 的回答。我需要两个单独的 ID,而不是用于额外检查,但它们用于完全不同的东西(一个不是用于检查谁试图生成),:) 这不是我的设计,所以如果 Hibernate 可以生成两个,我想作为一个选项进行搜索除了以编程方式生成它们的选项之外,单个实体中有不同的 ID?
标签: hibernate spring-mvc annotations uuid auto-generate