如何在Hibernate映射和Oracle表字段中保存UUID字段?

时间:2015-03-19 11:35:29

标签: oracle hibernate jpa guid uuid

我们将使用UUID作为主键字段。在Oracle表和hibernate(JPA)映射中保存UUID的变体是什么? Varchar2 \ String在我看来很贵。 UUID作为主键的缺陷是什么?

1 个答案:

答案 0 :(得分:1)

您也可以使用RAW(16)。从空间使用的角度来看,它是最好的解决方案,但你仍然“浪费”了很多空间。

AFAIK没有陷阱,但对于有Oracle经验的人来说,这是非自然的解决方案。

PS:占用相同空格的数字id将有30个有效数字。

PS:您可以进行测试,创建一个具有数百万行的表,一旦将NUMBER作为PK,第二次将UUID作为PK。然后比较PK索引(段)的大小,叶块的数量,......

SQL> create table t1 as select level as N from dual connect by level <=1000000;
SQL> create table t2 as select sys_guid() as N from dual connect by level <=1000
000;
SQL> create unique index ix1 on t1(n);
SQL> create unique index ix2 on t2(n);
SQL> exec dbms_stats.gather_table_stats('SYS','T1');
SQL> exec dbms_stats.gather_table_stats('SYS','T2');    
SQL> select bytes, segment_name from dba_segments where segment_name in ('IX1',
'IX2');

     BYTES SEGMENT_NAME
---------- --------------------
  17825792 IX1
  31457280 IX2
SQL> select leaf_blocks, index_name from dba_ind_statistics where index_name in
('IX1', 'IX2');

LEAF_BLOCKS INDEX_NAME
----------- ------------------------------
       2087 IX1
       3760 IX2