生成方式包括:
increment:生成long, short或者int类型的主键,不能在cluster环境下使用。适用于所有数据库
identity:生成long, short或者int类型的主键。适用于DB2, MySQL, MS SQL Server, Sybase and HypersonicSQL
sequence :生成long, short或者int类型的主键。适用于DB2, PostgreSQL, Oracle, SAP DB, McKoi,Interbase.
hilo:生成long, short或者int类型的主键。需要提供一个数据库的表来存放生成的主键信息。当采用应用服务器的JTA提供的数据库连接或者用户自定义的数据库连接的时候,不要使用这种主键生成方式。适用于所有数据库
seqhilo:采用给定的数据库的sequence来生成long, short或者int类型的主键。适用于DB2, PostgreSQL, Oracle, SAP DB, McKoi,Interbase.
uuid.hex:采用128位的算法来生成一个32位字符串。最通用的一种方式。适用于所有数据库
uuid.string:同样采用128位的UUID算法。将生成的字符编码位16位。适用于除PostgreSQL.以外的数据库
native:根据具体连接的数据库从identity, sequence或者hilo选择一种来生成主键。适用的数据库根据选择的生成方式确定。
assigned: 交给应用自己给主键赋值。要注意的是赋值必须在调用save()方法之前完成。适用的数据库根据选择的生成方式确定。
你的例子中表明 表的id列是一个自增序列 (< generator="" class="sequence"> ) , 使用数据库中的Sequence ( < param="" name="sequence">序列名< aram=""> )
当你插入数据时, id列会根据你的设置自动调用序列的值插入id列中
这是用来设置主键生成策略的。
具体策略:
Hibernate的Generator属性有7种class,本文简略描述了这7种class的意义和用法。
1、identity:用于MySql数据库。特点:递增?
????????generator?class="identity">??? d="">?
注:对于MySql数据库使用递增序列时需要在建表时对主键指定为auto_increment属性。
2、sequence:用于Oracle数据库?
??????????????序列名 aram="">?????? enerator="">??? d="">?
3、native:跨数据库时使用,由底层方言产生。?
Default.sequence为hibernate_sequence
???????generator?class="native">??? d="">???
注:使用native时Hibernate默认会去查找Oracle中的hibernate_sequence序列。?
如果Oracle中没有该序列,连Oracle数据库时会报错。
4、hilo:通过高低位合成id,先建表hi_value,再建列next_value。必须要有初始值。
????????????????high_val aram="">??????????nextval aram="">?????????5 aram="">??????? enerator="">??? d="">??
5、sequencehilo:同过高低位合成id,建一个sequence序列,不用建表。?
??????high_val_seq aram="">???5 aram="">??? enerator="">??? d="">?
6、assigned:用户自定义id;?
????generator?class="assigned">??? d="">?
7、foreign:用于一对一关系共享主健时,两id值一样。?>?id?name="id"?column="id">?>?>?>?param?name="max_lo">?>?param?name="sequence">?generator?class="hilo">?id?name="id"?column="id">?>?>?>?param?name="max_lo">?>?param?name="column">?>?param?name="table">?generator?class="hilo">?id?name="id"?column="id">?>?id?name="id"?column="id">?>?>?>?param?name="sequence">?generator?class="sequence">?id?name="id"?column="id">?>?id?name="id"?column="id">
1) assigned
主键由外部程序负责生成,无需hibernate参与。
2) hilo
通过hi/lo 算法实现的主键生成机制,需要额外的数据库表保存主
键生成历史状态。
3) seqhilo
与hilo 类似,通过hi/lo 算法实现的主键生成机制,只是主键历史
状态保存在sequence中,适用于支持sequence的数据库,如oracle。
4) increment
主键按数值顺序递增。此方式的实现机制为在当前应用实例中维持
一个变量,以保存着当前的最大值,之后每次需要生成主键的时候
将此值加1作为主键。
5) identity
采用数据库提供的主键生成机制。如db2、sql server、mysql
中的主键生成机制。
6) sequence
采用数据库提供的sequence 机制生成主键。如oralce 中的
sequence。
7) native
由hibernate根据底层数据库自行判断采用identity、hilo、sequence
其中一种作为主键生成方式。
8) uuid.hex
由hibernate基于128 位唯一值产生算法生成16 进制数值(编码后
以长度32 的字符串表示)作为主键。
9) uuid.string
与uuid.hex 类似,只是生成的主键未进行编码(长度16)。在某些
数据库中可能出现问题(如postgresql)。
10) foreign
使用外部表的字段作为主键。
oracle数据库一般使用 increment自动增长或者sequence序列
一般id应该是唯一的,所以oracle 设计了序列,你可以在创建某个表时为其创建唯一的序列,此序列按照一定的规则产生唯一的id,在你添加记录时自动生成一个唯一的id给那张表。所以hibernate才有这个
class为别的值时,有其他的属性啊,表其实可以没有序列的。可以看这篇文章
http://ryxxlong.iteye.com/blog/612446
hibernate的主键生成策略
百度一下
我呵呵你一脸花露水