日期:2014-05-16  浏览次数:20525 次

oracle数据库,关于 could not get next sequence value错误!

今天搞SSH的时候遇到could not get next sequence value这个问题。在网上找了很多解决问题的办法都没解决掉。

最后,我把数据库重置了。然后再运行就好了。很诡异的一个错误。

?

网上有很多解决方案,都应该是遇到不同的错误。我的这种做法最好先不要做。先试试别的方法。

切记要在数据库创建主键自动生成策略:

create?sequence?DEPARTMENT_ID_SEQstart with 1 INCREMENT BY 1?名字一定要能对上。

?

配置文件版本的:

1.<id name="id" column="ID">

			<generator class="sequence"> 
				<param name="sequence">DEPARTMENT_ID_SEQ</param> 
			</generator> 
		</id>

?2.如果要使用native,则必须创建名为HIBERNATE_SEQUENCE 的sequence

CREATE SEQUENCE HIBERNATE_SEQUENCE MINVALUE 90000 MAXVALUE 999999999999999999999999 
      < id name="id" column="ID">   
                  < generator class="native" /> 
       < /id> 

?3. 如果<param name="sequence">MOKA_RECHARGE_MERCHANT_PRE_PAY</param> 这里面的表示过长也会照成could not get next sequence value!

解决,把MOKA_RECHARGE_MERCHANT_PRE_PAY改成小于30的字符。

?修改配置文件后注意:

??? 1:如果重新修改hibernate配置文件后,没有重新生成数据库表结果,直接做save动作的话,那就等着报 ORA-02289: 序列不存在这个异常吧。
??? 2:如果该表之前通过sql直接insert过2条数据,而且经过上面的修改后是直接修改该表,注意是修改而不是删除该表重新创建该表,那么通过hibernate在做save这个动作的时候会报
???? ORA-00001: 违反唯一约束条件 (POINT.SYS_C006384)这个错误,为什么呢?因为你的序列是重新开始的,而开始之前,你已经通过手动插入2条数据了,怎么解决呢?多做几次save的动作
直到大于数据库表中已经存在的序列id即可。

? ? 3.把数据库重置。

?

注释版本:@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="S_Teacher")

    @SequenceGenerator(name="S_Teacher",allocationSize=1,initialValue=1, sequenceName="S_Teacher")
?

?

暂时就记录这么多。希望大家有遇到的错误提出来一起探讨,一起记录。