我需要在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,只有一个被创建,另一个是null?我需要一些Hibernate的解决方案,而不是以图解的方式生成其中一个。
3条答案
按热度按时间kgqe7b3p1#
一个可能的解决方案是使用如下自定义查询
它将运行一个子查询来获取最新的值,并以1递增,然后保存它,您可以忽略自动生成的字段并依赖于jpa
EDIT:这个查询方法不是线程安全的。
i1icjdpr2#
然而,我发现的另一种方法是,我们可以在JPA实体中为@Id注解使用非主要字段,并提供@GeneratedValue注解,它将工作,但它需要在DB中创建db序列以生成值,并且Primary字段将由DB自动生成
bprjcwpo3#
我暂时决定使用UUID.randomUUID(),但我仍然渴望听到通过hibernate生成两个id的其他可能的解决方案。