mybatis 使用dblink 执行insert 报ora-22816 returning 子句不支持的功能问题解决方法

一、解决方案:

<insert id="insertTable">...</insert>

改成

<update id="insertTable">...</update>

注意:针对主键需要通过<selectKey>标签方式获取的不适用,因为此方式获取到的KeyGenerator 与普通的insert不一样,不需要更改,

    并且更改为update会直接报错

二、原因分析:

已采用PREPARED为例。

mybatis 需要在执行语句的过程中获取对应的statement对象,这个对象获取方式会根据KeyGenerator的实例对象不同而调用不同方法,包含KeyGenerator对象的mappedStatement 是根据 mybtis方法标签获得,如下图:

 普通insert 获取到的KeyGenerator对象是 Jbdc3KeyGenerator,调用的connection.prepareStatement(sql, keyColumnNames) 、 ,statement对象中的SQL会被修改,增加returning子句内容,这才是真正执行的SQL语句,但是oracle包含dblink的SQL本身就不支持使用 returning,因此报错信息提示 returning 子句不支持的功能。

insert标签改成update后,在MapperMathod.class中获得的KeyGenerator 是NoKeyGenerator,实际执行的SQL与传入的SQL语句一直,不会进行修改包装,因此可以执行成功


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值