今天在公司使用hibernate时遇到一个麻烦的问题,使用hibernate时将表的主键生成策略设定为sequence,但是在执行时总是报could not get next sequence value的错误,后来想起来别人给的建表SQL没有建立sequence的语句,于是就建立了个sequence,同时还建立了触发器,这就又引起了一个问题,最后发现只要建立个sequence就OK了,花了我不少时间有必要记录下。
使用hibernate 插入数据到oracle时,如果采用sequence方式生成主键则需要在hibernate的配置文件里指名相应的sequence,同时在oracle表中建立的sequence不要建立触发器
建立sequence的sql语句如下:
drop SEQUENCE exp_sequence
CREATE SEQUENCE exp_sequence
INCREMENT BY 1 -- 每次加几个
START WITH 1 -- 从1开始计数
NOMAXVALUE -- 不设置最大值
NOCYCLE -- 一直累加,不循环
NOCACHE -- 不建缓冲区
Hibernate端的关于主键的配置如下
<class name="org.taomujian.test.Expenseinfo" table="EXPENSEINFO" schema="EOS">
<id name="expid" type="java.lang.Long">
<column name="EXPID" precision="22" scale="0" />
<generator class="sequence">
<param name="sequence">exp_sequence</param>
</generator>
</id>
附件为使用的例子,配置好数据库即可使用(不用启动服务器,虽然建立的是web项目)。