Hibernate 主键生成策略

本文纯粹是网络收集后整理的产物,就当是笔记吧!

 

Hibernate 的配置和实体的映射中,主键生成的策略也应该算是比较繁琐的一个吧;

 

在Hibernate 中 主键生成策略主要有一下几种:

 

    1. 首先讲我暂时最熟悉的也是最通用的native 吧

         native 据说是通用但却惟独在mysql中不能用,在连oracle数据库时需要在oracle中创建一个hibernate_sequence序列,

         顺便讲下sequence的创建格式为

               CREATE SEQUENCE SEQname
               INCREMENT BY 1
               START WITH 1
               MAXVALUE 99999999

        感觉这种主键的生成策略不会被经常用于在实际的项目中,或说这种策略没什么绕绕的,很直接,太简单了.

 

暂时只比较理解这一种 以下是书中copy过来的,以后再有理解时再写吧

 

increment

用于为long, short或者int类型生成 唯一标识。只有在没有其他进程往同一张表中插入数据时才能使用。 在集群下不要使用。

identity

对DB2,MySQL, MS SQL Server, Sybase和HypersonicSQL的内置标识字段提供支持。 返回的标识符是long, short 或者int类型的。

sequence           在DB2,PostgreSQL, Oracle, SAP DB, McKoi中使用序列(sequence) ,而在Interbase中使用生成器(generator)。返回的标识符是 long, short或者 int类型的。 hilo

使用一个高/低位算法高效的生成long, short 或者 int类型的标识符。给定一个表和字段(默认分别是 hibernate_unique_keynext_hi)作为高位值的来源。 高/低位算法生成的标识符只在一个特定的数据库中是唯一的。

seqhilo

使用一个高/低位算法来高效的生成long, short 或者 int类型的标识符,给定一个数据库序列(sequence)的名字。

uuid

用一个128-bit的UUID算法生成字符串类型的标识符, 这在一个网络中是唯一的(使用了IP地址)。UUID被编码为一个32位16进制数字的字符串。

guid

在MS SQL Server 和 MySQL 中使用数据库生成的GUID字符串。

native

根据底层数据库的能力选择identity,sequence或者hilo中的一个。

assigned

让应用程序在save()之前为对象分配一个标示符。这是 <generator>元素没有指定时的默认生成策略。

select

通过数据库触发器选择一些唯一主键的行并返回主键值来分配一个主键。

foreign

使用另外一个相关联的对象的标识符。通常和<one-to-one>联合起来使用。

sequence-identity

一种特别的序列生成策略,使用数据库序列来生成实际值,但将它和JDBC3的getGeneratedKeys结合在一起,使得在插入语句执行的时候就返回生成的值。目前为止只有面向JDK 1.4的Oracle 10g驱动支持这一策略。注意,因为Oracle驱动程序的一个bug,这些插入语句的注释被关闭了。(原文:Note comments on these insert statements are disabled due to a bug in the Oracle drivers.)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值