1、identity:用于MySql数据库。特点:递增
- < id name="id" column="id">
- < generator class="identity"/>
- < /id>
采用数据库提供的主键生成机制。如DB2、SQL Server、MySQL 中的主键生成机制。
注:对于MySql数据库使用递增序列时需要在建表时对主键指定为auto_increment属性。
2、sequence:用于Oracle数据库
- < id name="id" column="id">
- < generator class="sequence">
- < param name="sequence">序列名< /param>
- < /generator>
- < /id>
采用数据库提供的 sequence 机制生成主键。如 Oralce 中的Sequence。
3、native:跨数据库时使用,由底层方言产生。
Default.sequence为hibernate_sequence
- < id name="id" column="id">
- < generator class="native"/>
- < /id>
由 Hibernate 根据使用的数据库自行判断采用 identity、hilo、sequence 其中一种作为主键生成方式。
注:使用native时Hibernate默认会去查找Oracle中的hibernate_sequence序列。
如果Oracle中没有该序列,连Oracle数据库时会报错。
4、hilo:通过高低位合成id,先建表hi_value,再建列next_value。必须要有初始值。
- < id name="id" column="id">
- < generator class="hilo">
- < param name="table">high_val< /param>
- < param name="column">nextval< /param>
- < param name="max_lo">5< /param>
- < /generator>
- < /id>
通过hi/lo 算法实现的主键生成机制,需要额外的数据库表或字段提供高位值来源。
5、sequencehilo:同过高低位合成id,建一个sequence序列,不用建表。
- < id name="id" column="id">
- < generator class="hilo">
- < param name="sequence">high_val_seq< /param>
- < param name="max_lo">5< /param>
- < /generator>
- < /id>
与hilo 类似,通过hi/lo 算法实现的主键生成机制,需要数据库中的 Sequence,适用于支持 Sequence 的数据库,如Oracle。
6、assigned:用户自定义id;
- < id name="id" column="id">
- < generator class="assigned"/>
- < /id>
主键由外部程序负责生成,在 save() 之前指定一个。
7、foreign:使用另外一个相关联的对象的标识符作为主键。用于一对一关系共享主健时,两id值一样。
8、uuid.hex 由 Hibernate 基于128 位 UUID 算法 生成16 进制数值(编码后以长度32 的字符串表示)作为主键。
9、 uuid.string 与uuid.hex 类似,只是生成的主键未进行编码(长度16),不能应用在 PostgreSQL 数据库中。