使用 system-uuid 将数据插入数据库

Inserting data to DB using system-uuid

我 运行 遇到与系统生成的唯一标识符相关的问题。

下面是我的 bean 中数据成员的定义 class:

@Id
@GeneratedValue(generator = "system-uuid")
@GenericGenerator(name = "system-uuid", strategy = "uuid")
@Column(name = "id")
private String id;

每当调用客户端操作时,数据将根据使用上述 system-uuid 动态生成的 id 属性值持久保存到数据库中。现在我有一个要求,我必须对此 table 执行批量插入。由于没有导入功能,有什么方法可以使用 oracle 插入查询从后端执行批量插入?如果是这样,我如何提及列 'id' 的值,以便它的工作方式与从客户端发生的插入相同。

SYS_GUID 的用法对于批量插入非常有效,如下面的一个小示例所模拟的

INSERT INTO TARGET_TABLE
select 
rawtohex(sys_guid()) uuid
from dual connect by level <= 3
;

唯一的(可见的)问题是,生成的字符串未按照 Java uuid 的预期格式进行格式化。

UID                           
--------------------------------
BBEDBA2A9BB44952AA5EE311D0880C39 
B95CA374AC7C4619A68543771101D590 
6B4E89CF0307427BBD047E42BD6DFBB0

一个简单的子查询和一些带有串联的 substrs 带来了补救措施 - 请参阅 :

with t as (
  select rawtohex(sys_guid()) guid from dual
  connect by level <= 3
)
select guid, lower(substr(guid, 1, 8)
  ||'-'|| substr(guid, 9, 4)
  ||'-'|| substr(guid, 13, 4)
  ||'-'|| substr(guid, 17, 4)
  ||'-'|| substr(guid, 21, 12)) as formatted_guid
from t;


GUID                             FORMATTED_GUID                     
-------------------------------- ------------------------------------
993712381A8543FB9320C587D078330E 99371238-1a85-43fb-9320-c587d078330e 
FFF3CF7104E048BF8E6677B080BD35A6 fff3cf71-04e0-48bf-8e66-77b080bd35a6 
1FBCC67EA46B4474B26128F2DDAA519B 1fbcc67e-a46b-4474-b261-28f2ddaa519b