• mybatis执行自带update方法遇到的坑


    1. 背景

            项目上需要对已有oracle数据源进行兼容改造,兼容doris数据源。改造过程中发现,启动项目时有一个类内部执行updateByPrimaryKeySelective时异常。把日志打印出的SQL复制到doris数据库执行,提示的错误与项目内一致,说明错误是数据库级别的,而非项目内部问题。错误信息如下

    SQL 错误 [1105] [HY000]: errCode = 2, detailMessage = Only value columns of unique table could be updated.

    该错误在oracle中不会抛出,而导致这个错误的原因,是因为update语句中的set中包含了

    id=id!!!

    至于为什么doris不支持这种语法,或者甚至都不知道doris是什么东西的各位,去自己找找看吧,反正网上能搜到doris的东西少之又少。

    2. 解决

            还是熟悉的配方,无非就是各种网上查找无果而已。能找到的都是关于MyBatis实体类主键需要增加@id注解,更新才不会无效、错误等这些文章。其实都没错,只是不适用于本人这次遇到的问题罢了。毕竟这次是跟doris这种用的人少之又少的数据库打交道,遇到各种奇怪的问题也不足为奇了。

            究其原因,是因为项目中引用了内部一个包,而包里用到了mapper-4.0.1.jar这个jar包进行更新操作。反正就是pom文件内的配置各种套娃,找不到正常版本的方法。解决方案就是想办法把错误的包排除,使用正确的就行了。正常的jar包是mapper-base-4.2.2.jar

    看是否引用对的jar包,只需要在方法上按住CTRL键+鼠标左键进入引用内部就知道了(这不会还有人不知道吧)。

    3. 吐槽

            Apache Doris 是一个基于 MPP 架构的高性能、实时的分析型数据库。通过这句话就能看出,doris数据库引用场景及特点其实是用于数据分析,当然也不是不能用于增删改操作,但限制颇多。对于一般的业务系统,需要频繁进行增删改操作的场景下并不适用。而且还不支持事务,还不如用mysql,甚至国产的达梦都行。

    PS:

    关于更多doris遇到的坑,请看

    doris数据库操作数字遇到的问题_CS_草祭先生的博客-CSDN博客

  • 相关阅读:
    C++人生重开模拟器
    Csharp中表达式树
    从数据库设计到性能调优,全面掌握openGemini应用开发最佳实践
    uni-app集成使用SQLite
    SpringBoot利用validation做参数校验
    VO、DTO
    【微信小程序 | 实战开发】配置微信小程序APPID并快速接入
    Linux MMC子系统 - 5.eMMC 5.1工作模式-引导模式
    梅科尔工作室-华为14天鸿蒙设备开发实战笔记四
    【浅学Java】SpringBoot创建和使用
  • 原文地址:https://blog.csdn.net/aw277866304/article/details/132734833