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>
相关推荐
懒羊羊不懒@2 小时前
【MySQL | 基础】通用语法及SQL分类
数据库·oracle
llxxyy卢2 小时前
基于时间的 SQL 盲注-延时判断和基于布尔的 SQL 盲注
数据库·sql·oracle
記億揺晃着的那天11 小时前
数据库中 ACID 四个核心特性
数据库·mysql·oracle·系统设计·acid
切糕师学AI20 小时前
SQL中的函数索引/表达式索引
数据库·sql·mysql·postgresql·oracle
Leon-Ning Liu1 天前
Oracle数据库常用视图:dba_datapump_jobs
数据库·oracle·dba
数据库生产实战1 天前
Oracle 19C RAC下TRUNCATE TABLE的REUSE STORAGE选项作用和风险浅析!
数据库·oracle
小白银子1 天前
零基础从头教学Linux(Day 60)
linux·数据库·mysql·oracle
wangjialelele1 天前
MySQL操作库
数据库·mysql·oracle
Koma-forever1 天前
Oracle SQL Developer设置打开表的时候如何是新窗口中打开
数据库·sql·oracle
馨谙1 天前
SELinux 文件上下文管理详解:从基础到实战
jvm·数据库·oracle