如果您不喜歡序列(並且存在使用它們的缺點,例如跨實例的可移植性),那麼爲什麼不使用Oracle的GUID呢?它可用於自動生成主鍵也:
create table my_tab2
(
val1 raw(16) default sys_guid(),
val2 varchar2(100),
primary key(val1)
)
table MY_TAB2 created.
> insert into my_tab2 (val2) values ('A test val')
1 rows inserted.
> commit
committed.
> select * from my_tab2
VAL1 VAL2
-------------------------------- ----------------------------------------------------------------------------------------------------
E8B47FA523673C97E040A8C014175791 A test val
你甚至不必關心PK的填充方式(對於一個序列中沒有觸發或不斷地在插入使用seq.nextval)。看起來不是很漂亮(我猜想數字不是很好)。另外,如果你依賴於Hibernate(或者數據庫之外的任何其他應用程序/系統)來爲表生成密鑰,那麼該表就是100%依賴於Hibernate或任何外部系統的持續維護和完整性。數據屬於公司,而不是應用程序。在我看來,數據庫層應該儘可能獨立(在這種情況下,只需使用Oracle的sys_guid而不是Hibernate生成的內容,可以增加數據層的獨立性)。在這種情況下可能看起來微不足道,但爲什麼不使用Oracle首先提供的功能。