錯誤提示:對實體做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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.