症状:

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。

最新文章

  1. Android客户端和服务器端数据交互
  2. SDC Tcl package of Timequest
  3. 【转】【51CTO 网+】怎样做一款让用户来电的产品
  4. php中英文截取无乱码 包括全角下的字符
  5. css定位的简单总结
  6. gitlab 配置邮箱
  7. JavaScript正则验证邮箱
  8. CodeForces 373B Making Sequences is Fun
  9. Windbg 内存命令 《第四篇》
  10. tomcat下jndi的三种配置方式
  11. Delphi Refactor 重构
  12. 图像处理库的比较:OpenCV,FreeImage,CImg,CxImage
  13. 运行PHP后台项目:xampp下载,安装,配置,运行PHP的web项目
  14. Python全栈-magedu-2018-笔记8
  15. Ajax(django)
  16. stark 组件 url 二级分发的实现
  17. django views视图函数返回值 return redirect httpresponse总结
  18. 安恒月赛WP
  19. asp.net用三层实现多条件检索
  20. 0.ECMAScript 6 简介

热门文章

  1. [SoapUI] UrlEncode编码/UrlDecode解码网站
  2. java中的集合类总结
  3. javascript总结41:表格全选反选,经典案例详解
  4. GitHub 出现这样的问题怎么办
  5. shell 编程 变量
  6. 编写高质量代码改善C#程序的157个建议——建议91:可见字段应该重构为属性
  7. WSAStartup函数
  8. Shell脚本中$0、$?、$!、$$、$*、$#、$@
  9. 深入探讨 Java 类加载器(转载)
  10. JAVA并发设计模式学习笔记(二)—— Single Threaded Execution Pattern