如果您不喜欢序列(并且使用它们也有缺点,例如跨实例的可移植性),那么为什么不使用 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 提供的特性。