2016-04-26 14 views
1

システム生成のユニーク識別子に関連する問題が発生しました。system-uuidを使用してDBにデータを挿入する

以下

は私のBeanクラスからのデータメンバーの定義です:

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

クライアントアクションが呼び出されるたびに、データがシステムUUIDの上使用して動的に生成されたid属性の値に基づいて、DBに永続化されます。今、私はこのテーブルに一括挿入する必要があります。インポート機能がないので、oracle insertクエリを使用してバックエンドから一括挿入を実行できる方法はありますか?もしそうなら、どのように私は列 'ID'の値がクライアントから起こった挿入と同じように動作するように言及しますか?小さな例を以下にシミュレートされるよう

+0

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

答えて

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 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

関連する問題