ORA-01790: 表达式必须具有与对应表达式相同的数据类型

mapper

java 复制代码
void insertBatch(@Param("inventoryAuthHisList") List<InventoryAuthHis> inventoryAuthHisList);

xml

xml 复制代码
    <insert id="insertBatch">
        insert into T_INVENTORY_AUTH_HIS (HIS_OPER_ID, HIS_OPER_DATE, HIS_OPER_TYPE, AUTH_ID, INVENTORY_ID, USER_ID, AUTH_TYPE, AREA_ID)
        <foreach collection="inventoryAuthHisList" item="item" open="(" separator=" union all " close=")">
            select #{item.hisOperId}, #{item.hisOperDate}, #{item.hisOperType}, #{item.authId}, #{item.inventoryId}, #{item.userId}, #{item.authType}, #{item.areaId} from dual
        </foreach>
    </insert>

上面的批量插入报错

在执行SQL时MyBatis会自动通过对象中的属性给SQL中参数赋值,它会自动将Java类型转换成数据库的类型。

而一旦传入的是null它就无法准确判断这个类型应该是什么,就有可能将类型转换错误,从而报错。

jdbcType了解一下啊,参考jdbcType网址

Mybatis JdbcType Oracle MySql
JdbcType ARRAY
JdbcType BIGINT BIGINT
JdbcType BINARY
JdbcType BIT BIT
JdbcType BLOB BLOB BLOB
JdbcType BOOLEAN
JdbcType CHAR CHAR CHAR
JdbcType CLOB CLOB CLOB
JdbcType CURSOR
JdbcType DATE DATE DATE
JdbcType DECIMAL DECIMAL DECIMAL
JdbcType DOUBLE NUMBER DOUBLE
JdbcType FLOAT FLOAT FLOAT
JdbcType INTEGER INTEGER INTEGER
JdbcType LONGVARBINARY
JdbcType LONGVARCHAR LONG VARCHAR
JdbcType NCHAR NCHAR
JdbcType NCLOB NCLOB
JdbcType NULL
JdbcType NUMERIC NUMERIC/NUMBER NUMERIC
JdbcType NVARCHAR
JdbcType OTHER
JdbcType REAL REAL REAL
JdbcType SMALLINT SMALLINT SMALLINT
JdbcType STRUCT
JdbcType TIME TIME
JdbcType TIMESTAMP TIMESTAMP TIMESTAMP/DATETIME
JdbcType TINYINT TINYINT
JdbcType UNDEFINED
JdbcType VARBINARY
JdbcType VARCHAR VARCHAR VARCHAR

因此修改一下xml

看数据表字段类型改

xml 复制代码
    <insert id="insertBatch">
        insert into T_INVENTORY_AUTH_HIS (HIS_OPER_ID, HIS_OPER_DATE, HIS_OPER_TYPE, AUTH_ID, INVENTORY_ID, USER_ID, AUTH_TYPE, AREA_ID)
        <foreach collection="inventoryAuthHisList" item="item" open="(" separator=" union all " close=")">
            select #{item.hisOperId}, #{item.hisOperDate}, #{item.hisOperType}, #{item.authId}, #{item.inventoryId}, #{item.userId}, #{item.authType}, #{item.areaId,jdbcType=DOUBLE} from dual
        </foreach>
    </insert>
相关推荐
架构师老Y12 小时前
013、数据库性能优化:索引、查询与连接池
数据库·python·oracle·性能优化·架构
Leon-Ning Liu13 小时前
Oracle 26ai新特性:时区、表空间、审计方面的新特性
数据库·oracle
Yushan Bai14 小时前
ORACLE数据库在进行DROP TABLE时失败报错ORA-00604问题的分析处理
数据库·oracle
XDHCOM17 小时前
ORA-31215: DBMS_LDAP PL/SQL无效LDAP修改值,Oracle报错故障修复与远程处理方案,快速解决连接配置难题
数据库·sql·oracle
betazhou20 小时前
记一次Oracle REDO在线日志损坏故障修复
数据库·oracle·redo·ora-00600
老苏畅谈运维21 小时前
DBA分析 ORA 报错的利器,errorstack让 Oracle 错误现原形
数据库·oracle·dba
大江东去浪淘尽千古风流人物21 小时前
【Basalt】nfr_mapper 中的“小 SfM/BA 后端”
c++·人工智能·计算机视觉·oracle·augmented reality
曹牧1 天前
Oracle数据库中,将JSON字符串转换为多行数据
数据库·oracle·json
jnrjian1 天前
text index 查看index column index定义 index 刷新频率 index视图
数据库·oracle
韶博雅1 天前
emcc升级
oracle