Oracle与Hibernate主键映射策略

来源:互联网 发布:懒人电脑椅 知乎 编辑:程序博客网 时间:2024/05/06 17:20

      在MSSQL、MYSQL可以使用native作为自增主键生成策略。native就是将主键的生成工作交由数据库完成,hibernate不管。但在ORACLE中不能用,ORACLE中本身不提供主键递增生成策略,通过索引和触发器实现主键递增。如果在Hibernate主键生成策略中使用native会出现找不到sequence,使用increment同样不可以,increment不可以使用在集群环境,identity只适用于MSSQL和MYSQL中,同样使用uuid也不可以,只能使用<generator class="sequence"> <param name="sequence">seq_somename</param> </generator>。但是这样做 我发现 hibernate会取得一次sequence, 同时数据库还有一个triger会取得一次sequence, 这样实际的sequence会加2了!! 而且create返回的对象的主键id也是错误的, 因为还被triger加了1, 数据库里面的记录全面是双数, 2,4,6,8 create返回主键却是1,3,5,7,但对整个系统没有大的影响。            

        用native作为Hibernate主键映射策略,可移植性强适合各种类型的数据库,native就是将主键的生成工作交由数据库完成,hibernate不管。对于Oracle数据库要使用native作为Hibernate主键映射策略,与其它数据有所不同,一定要建立一个全局的序列sequence,而且这个sequence名唯一hibernate_sequence,这是hibernate默认的序列名称,不能更改。

原创粉丝点击