2016-04-26 16 views
1

我遇到了與系統生成的唯一標識符相關的問題。使用system -uuid將數據插入數據庫

下面是一個數據成員定義從我bean類:

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

每當被調用客戶端的動作,數據將根據用上述系統的UUID動態生成用於id屬性的值保存到DB 。現在我有一個要求,其中我必須對此表執行批量插入。由於沒有導入功能,有沒有什麼辦法可以使用Oracle插入查詢從後端執行批量插入?如果是這樣,我如何提及'id'這個列的值,以便它像插入發生在客戶端一樣工作。

+0

使用SYS_GUID https://docs.oracle.com/cd/B12037_01/server.101/ b10759/functions153.htm。 – ibre5041

回答

1

如下模擬上的一個小例子

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

唯一(光)的問題是,如從Java UUID預期生成的字符串沒有被格式化的SYS_GUID的使用是對於批量插入非常有效。

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

一個簡單的子查詢和一些substr s的串聯帶來的補救措施 - 見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 
+0

非常感謝Marmite,它的工作! – AsteriK

+1

背後的原因是Oracle的UUID是RAW(16),使用更有效的存儲方式而不是CHAR(36)。 – ibre5041