1、hibernate自己维护主键的值。首先获取该表中最大主键值,然后加一插入。主键字段对应的属性类型可以是int、short、long以及其封装类型。在高并发或者集群的情况下不能使用。
2、identity:使用数据库自身自增长来维护。
<id name="id" column="tid"><generator class="sequence"></generator>
结果sql
Hibernate: create table hibernate_sequence (next_val bigint) Hibernate: insert into hibernate_sequence values ( 1 ) Hibernate: create table t_student (tid integer not null,tname varchar(255),tage integer,tscore double precision,primary key (tid)) Hibernate: selectnext_val as id_val fromhibernate_sequence for updateHibernate: updatehibernate_sequence setnext_val= ? wherenext_val=? Hibernate: insert intot_student(tname, tage, tscore, tid) values(?, ?, ?, ?)
<id name="id" column="tid"><generator class="native"></generator></id>
3、由Hibernate根据所使用的数据库支持能力从identity、sequence生成策略中选择一种。
4、assigned生成策略:程序员通过setId()手动设置。
5、uuid生成策略:使用IP地址、JVM的启动时间、当前系统时间、和一个计数器值经过计算产生。是一个32位长度的字符串。
示例: