标识符过长 引起的 could not get next sequence value

错误提示:对实体做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即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值