hibernate Spring中的两个自动生成的ID单个实体

x0fgdtte  于 2023-10-23  发布在  Spring
关注(0)|答案(3)|浏览(119)

我需要在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的解决方案,而不是以图解的方式生成其中一个。

kgqe7b3p

kgqe7b3p1#

一个可能的解决方案是使用如下自定义查询

  • @Modifying @Query(“insert into tablename values(some_val,some_val,(select max(some_id)+1 from sametablename)”)void saveEntity();***

它将运行一个子查询来获取最新的值,并以1递增,然后保存它,您可以忽略自动生成的字段并依赖于jpa
EDIT:这个查询方法不是线程安全的。

i1icjdpr

i1icjdpr2#

然而,我发现的另一种方法是,我们可以在JPA实体中为@Id注解使用非主要字段,并提供@GeneratedValue注解,它将工作,但它需要在DB中创建db序列以生成值,并且Primary字段将由DB自动生成

bprjcwpo

bprjcwpo3#

我暂时决定使用UUID.randomUUID(),但我仍然渴望听到通过hibernate生成两个id的其他可能的解决方案。

相关问题