刚刚接触Hibernate不长时间,今天想动手做一个小例子,数据库使用的是Oracle。打算使用Oracle中的序列作为表的主键,却不知道使用Hibernate如何与其关联在一起。请教同事,被告知要使用诸如select语句进行查询“select sequence.nextval from dual”,晕倒~
终于等到中午,上网去查资料。得解:
1、在oracle 首先创建sequence
create sequence seq_id
minvalue 1
start with 1
increment by 1
cache 20;
2.在你的hbm.xml中的配置
<id column="ID0000" name="id" type="integer">
<generator class="sequence">
<param name="sequence">seq_id</param>
</generator>
</id>
这样再插入数据的时候,Hibernate回自动生成如下语句:
hibernate: select seq_id.nextval from dual
hibernate: insert into YXJK.T_YXJK_WHRYTXL (XM0000, ZW0000, LXDH00,SJHM00,DZYJ00,IP0000,ID0000) values (?, ?, ?, ?, ?, ?, ?)
自动生成下一个序列值,然后将对象插入表中。
这样问题得解!
PS:
sequence就是采用数据库提供的sequence机制生成主键。如oralce中的Sequence
native就是由hibernate根据数据库的Dialect,自动采用identity,hilo,sequence的其中一种作为主键生成方式