1. increment
保存数据的时候hibernate会先发送一条select语句,查询数据库主键的最大值,再根据最大值,得到下一个主键,赋给对象。
注意:多个实例一起运行时不能使用此方法,因为线程安全问题,会出异常。(适用于测试环境,非生产环境)
2.identity
由底层数据库负责生成标识符,它要求底层数据库把主键定义为自动增长字段类型
注意:1.要求底层数据库必须支持自动增长字段类型。(DB2,MySQL,MSSQLServer,Sybase等都可以,Oracle不可以)
2.OID必须定义为 long,int,short。
3.sequence
利用底层数据库提供的序列来生成标识符
注意:1.要求底层数据库必须支持序列(DB2,Oracle)(MySQL不支持)
2.OID必须定义为 long,int,short。
4.hilo(和 jpa 中的table有一点相似)
由hibernate根据 high/low 算法生成标识符,它从数据库特定的字段获取high值。 hibernate在持久化一个对象时,由hibernate负责生成主键值,hilo在生成标识符时,需读取并修改HI_TABLE中NEXT_VALUE的值。
<generator class="hilo">
<param name="table">HI_TABLE</param>
<param name="column">NEXT_VALUE</param>
<param name="max_lo">10</param>
</generator>
注意:1.hilo生成标识符机制不依赖于底层数据库,因此它适合于所有的数据库。
2.OID必须定义为 long,int,short。
5.nantive(类似JPA中的INDENTITY)(很常用)
根据底层数据库对自动生成标识符的支持能力,来选择使用identity,seqquence,或hilo 标识符生成器
注意:1.OID必须定义为 long,int,short。
6.uuid
采用128位的uuid算法生成主键,uuid被编码为一个32位16进制数字的字符串。
注意:1.主键为字符串类型
7.assigned(类似于jpa中的AUTO)
在插入数据的时候主键由程序处理
注意:这是 <generator>元素没有指定时的默认生成策略。