我遇到了与系统生成的单一标识符相关的问题。
以下是我的bean类中的数据库的定义:
@Id
@GeneratedValue(generator = "system-uuid")
@GenericGenerator(name = "system-uuid", strategy = "uuid")
@Column(name = "id")
private String id;
每当调用客户端操作时,数据将基于使用上述system-uuid动态生成的id属性值保存到DB。现在我有一个要求,我必须对此表执行批量插入。由于没有导入功能,有什么方法可以使用oracle插入查询从后端执行批量插入?如果是这样,我如何提及列'id'的值,使其工作方式与从客户端发生的插入相同。
答案 0 :(得分:1)
SYS_GUID
的使用对于批量插入非常有效,如下面的小例子
INSERT INTO TARGET_TABLE
select
rawtohex(sys_guid()) uuid
from dual connect by level <= 3
;
唯一(光学)问题是生成的字符串没有按照Java uuid的预期格式化。
UID
--------------------------------
BBEDBA2A9BB44952AA5EE311D0880C39
B95CA374AC7C4619A68543771101D590
6B4E89CF0307427BBD047E42BD6DFBB0
一个简单的子查询和一些带有连接的substr
带来了补救措施 - 请参阅here:
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