★assigned
<
id
name
="id"
type
="integer"
>
< colum name ="id" />
< generator class ="assigned" ></ generator >
</ id >
< colum name ="id" />
< generator class ="assigned" ></ generator >
</ id >
1.主键的生成完全由用户决定,与底层数据库无关
2.用户需要维护主键值
3.在调用session.save()前要指定主键值
★hilo
默认表为hibernate_unique_key,只有一个int类型字段next_hi,必须有一行数据,而且不能更改
<
id
name
="id"
type
="integer"
>
< colum name ="id" />
< generator class ="hilo" ></ generator >
</ id >
< colum name ="id" />
< generator class ="hilo" ></ generator >
</ id >
自己建表,例如my_unique_key,字段为next_hi_value,一样必须有一行数据,而且不能更改
<
id
name
="id"
type
="integer"
>
< colum name ="id" />
< generator class ="hilo" >
< colum name ="id" />
< generator class ="hilo" >
<param name="table">my_unique_key</param>
<param name="column">next_hi_value</param>
</
generator
>
</ id >
</ id >
1.需要额外的数据库表的支持
2.能保证同一个数据库中主键的唯一性,但不能保证多个数据库之间主键的唯一性
3.hilo主键生成方式由Hibernate维护,所以hilo方式与底层数据库无关。但不应该手动修改hi/lo算法使用的表的值,否则会引起主建重复的异常
★seqhilo
使用方法与hilo方式类似,通过hi/lo算法生成主键,但要求底层数据库支持sequence,如Oracle,DB2