错误提示:对实体做save动作时,报由java.sql.SQLException: ORA-00972: 标识符过长,引起的could not get next sequence value的错误提示
问题产生环境:hibernate配置文件如下
<hibernate-mapping default-cascade="save-update">
<class name="com.milesup.data.extra.MokaRechargeMerchantPrePay" table="MOKA_RECHARGE_MERCHANT_PRE_PAY" dynamic-insert="false" dynamic-update="false">
<id name="id" type="int" unsaved-value="0">
<column name="ID" sql-type="NUMBER(10)"/>
<generator class="sequence">
<param name="sequence">MOKA_RECHARGE_MERCHANT_PRE_PAY</param> <!--修改前的序列值--> 修改后的序列值<!--MOKA_RC_MT_PRE_PAY_SEQ-->
</generator>
</id>
<property name="merchantId" type="int">
<column name="MERCHANT_ID" not-null="false" unique="false" sql-type="NUMBER(10)"/>
</property>
。。。。。。。。
</class>
</hibernate-mapping>
问题产生原因:oracle数据库规定序列的名称、表名称必须小于30个字符。由于原来序列的名称MOKA_RECHARGE_MERCHANT_PRE_PAY已经大于30个字符,所以在再做save动作的时候,会报
由java.sql.SQLException: ORA-00972: 标识符过长,引起的could not get next sequence value问题。
解决办法:将原来的序列的名称MOKA_RECHARGE_MERCHANT_PRE_PAY,修改为MOKA_RC_MT_PRE_PAY_SEQ小于30个字符,然后重新生成对应的数据库表结构即可。
注意:
1:如果重新修改hibernate配置文件后,没有重新生成数据库表结果,直接做save动作的话,那就等着报 ORA-02289: 序列不存在这个异常吧。
2:如果该表之前通过sql直接insert过2条数据,而且经过上面的修改后是直接修改该表,注意是修改而不是删除该表重新创建该表,那么通过hibernate在做save这个动作的时候会报
ORA-00001: 违反唯一约束条件 (POINT.SYS_C006384)这个错误,为什么呢?因为你的序列是重新开始的,而开始之前,你已经通过手动插入2条数据了,怎么解决呢?多做几次save的动作
直到大于数据库表中已经存在的序列id即可。
标识符过长 引起的 could not get next sequence value
最新推荐文章于 2023-02-20 09:43:03 发布