日期:2014-05-16 浏览次数:20525 次
今天搞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")?
?
暂时就记录这么多。希望大家有遇到的错误提出来一起探讨,一起记录。