一 为表创建自增长自段有两种一种是不同的表使用各自的Sequence方法如下
在Oracle sequence首先创建sequence
create sequence seq_id
minvalue
start with
increment by
cache ;
在你的hbmxml中的配置
<id column=ID name=id type=integer>
<generator class=sequence>
<param name=sequence>seq_id</param>
</generator>
</id>
这样再插入数据的时候Hibernate会自动生成如下语句
hibernate: select seq_idnextval from dual
hibernate: insert into YXJKT_YXJK_WHRYTXL (XM ZW LXDH SJHM DZYJ
IP ID) values (? ? ? ? ? ? ?)
自动生成下一个序列值然后将对象插入表中在使用的时候需要注意Hibernate对于sequence的主键的要求是一定要是shorlong或者integer
二 还有一种方式是使用公共的sequence
这各时候可以不指定表使用的sequence那么相应的hbmxml中内容是
<id column=ID name=id type=integer>
<generator class=native>
</generator>
</id>
然后创建公用的 sequence对象命名为 hibernate_sequence
create sequence hibernate_sequence
minvalue
maxvalue
start with
increment by ;
三 注意事项
如果数据库是从sqlserver等其他数据库移植而来的那么创建sequence时的起始值应该比当前表中最大的ID值大否则会出现错误因为sequence 不会维护是否和导库前现有的值重复
sequence用于Oracle数据库
<id name=id column=id>
<generator class=sequence>
<param name=sequence>序列名</param>
</generator>
</id>
native跨数据库时使用由底层方言产生
Defaultsequence为hibernate_sequence
<id name=id column=id>
<generator class=native/>
</id>
注使用native时Hibernate默认会去查找Oracle中的hibernate_sequence序列如果Oracle中没有该序列连Oracle数据库时会报错