; uncategorized SQLException; SQL state [99999]; error code [17090]; 不允许的操作; nested exception is jav

本文详细记录了解决在使用MyBatis 3.4.6版本进行批量插入Oracle数据库时遇到的不允许的操作错误的过程。通过调整XML映射文件中插入语句的配置,特别是添加useGeneratedKeys=false属性,成功解决了这一问题。

今天在做mybatis批量插入oracle的时候报了这个错误; uncategorized SQLException; SQL state [99999]; error code [17090]; 不允许的操作; nested exception is java.sql.SQLException: 不允许的操作(String),搞了一晚上头大,记录下解决方法。

项目里面用的mybatis版本是mybatis-3.4.6
不同的版本写法还不一样,我们原来的项目也是这样写没啥问题。

之前的写法
	<insert id="batchUserRole" >
		BEGIN
		<foreach item="item" index="index" collection="list" separator=";">
			insert into sys_user_role(user_id, role_id) values	(#{item.userId},#{item.roleId})
		</foreach>
		;END ;
	</insert>
改过之后的写法
	<insert id="batchUserRole" useGeneratedKeys="false">
		BEGIN
		<foreach item="item" index="index" collection="list" separator=";">
			insert into sys_user_role(user_id, role_id) values	(#{item.userId},#{item.roleId})
		</foreach>
		;END ;
	</insert>

这里我没有添加parameterType="java.util.List"也是可以的,默认还是添加一下比较好。

完整的写法
	<insert id="batchUserRole" useGeneratedKeys="false" parameterType="java.util.List">
		BEGIN
		<foreach item="item" index="index" collection="list" separator=";">
			insert into sys_user_role(user_id, role_id) values	(#{item.userId},#{item.roleId})
		</foreach>
		;END ;
	</insert>

为什么需要添加 useGeneratedKeys="false"呢,是因为mybatis在批量插入的时候如果没有指定useGeneratedKeys="false"为false,会自动认为主键是自增类型,在mysql里面貌似没问题,但是在oracle就死活执行不成功。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值