getLong not implemented for class oracle.jdbc.driver.T4CRowidAccessor


症狀:

SpringMVC+MyBatis向數據庫插入數據,主鍵應用ORACLE中自己設置的自增序列會發生如下錯誤:

nested exception is Java.sql.SQLException: 無效的列類型: getLong not implemented for class oracle.jdbc.driver.T4CRowidAccessor

 

解決辦法:

相應實體類映射文件中

<insert id="save" parameterType="io.renren.entity.ScheduleJobEntity" useGeneratedKeys="false" keyProperty="jobId"  databaseId="oracle">
        insert into "schedule_job"
        (
        "bean_name", 
        "method_name", 
        "params", 
        "cron_expression", 
        "remark"
        )
        values
        (
        #{beanName,jdbcType=NVARCHAR}, 
        #{methodName,jdbcType=VARCHAR}, 
        #{params,jdbcType=VARCHAR}, 
        #{cronExpression,jdbcType=VARCHAR}, 
        #{remark,jdbcType=VARCHAR}
        )
    </insert>

 

將 useGeneratedKeys="true" 改為 useGeneratedKeys="false" 。

把insert 屬性里的useGeneratedKeys的屬性設置為false就可以成功插入數據了,useGeneratedKeys 要求數據庫本身具備主鍵自動增長的功能,  mysql,sqlserver可以使用useGeneratedKeys =true 這功能,oracle不支持useGeneratedKeys,所以ORACLE是不能使用useGeneratedKeys =true的。  

 

7月20日補充:

按照上面方法,雖然數據插入成功了,但是在 ScheduleJobEntity 中無法返回 jobId值,即ScheduleJobEntity.jobId為NULL,這將導致后續代碼出錯。

Oracle雖然不直接支持自增ID,但可以通過序列實現類似自增ID的效果,因此,改為以下代碼:

<insert id="save" parameterType="io.renren.entity.ScheduleJobEntity" keyProperty="jobId"  databaseId="oracle">

        <selectKey resultType="Long" order="BEFORE" keyProperty="jobId">  
            SELECT SEQ_SCHEDULE_JOB.NEXTVAL as jobId from DUAL
        </selectKey> 

        insert into "schedule_job"
        (
        "job_id",
        "bean_name", 
        "method_name", 
        "params", 
        "cron_expression", 
        "status",
        "remark"
        )
        values
        (
        #{jobId,jdbcType=INTEGER}, 
        #{beanName,jdbcType=NVARCHAR}, 
        #{methodName,jdbcType=VARCHAR}, 
        #{params,jdbcType=VARCHAR}, 
        #{cronExpression,jdbcType=VARCHAR}, 
        #{status,jdbcType=VARCHAR}, 
        #{remark,jdbcType=VARCHAR}
        )
    </insert>

 

經測試,運行正常,運行后返回插入記錄的ID給Entity。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM