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。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)