Error selecting key or setting result to parameter object

本文介绍在使用Spring+MyBatis框架时遇到的序列主键问题及解决方法,涉及序列创建、主键类型匹配、数据库连接配置等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

做Spring+MyBatis的时候出现问题,因为运用到了序列,所以新增的时候使用序列号作为主键,在.xml文件中新增一个信息的代码如下所示(并无错误):

	<insert id="insert" parameterType="New">
		insert into
		news(nid,title,content,published_time,look_count,reply_count)
		values(#{nid},#{title},#{content},#{publishedTime},#{lookCount},#{replyCount})

		<selectKey order="BEFORE" keyProperty="nid" resultType="_long">
			select MYSEQ.nextval from dual
		</selectKey>
	</insert>

这是我之前就已经创建好的序列 

CREATE SEQUENCE myseq  --序列名
INCREMENT BY 1   -- 每次加几个  
START WITH 1       -- 从1开始计数  
NOMAXVALUE        -- 不设置最大值  
NOCYCLE               -- 一直累加,不循环  
CACHE 10;

然而提示:错误选择键或将结果设置为参数对象

直觉觉得是序列有问题,也找了好多资料

总结一下找到的各种原因包括:

1.实体中主键类型与映射文件中的类型要保持一致

2.序列不存在(可能是没有创建该序列,重新创建一个所需序列即可,上面附上我创建的简单序列,需要可以参考一下)

3.必须要设置resultType且注意类型与属性中类型是否一致

4.数据库连接对象错误,导致找不到该序列(我就是这个样子,粗心大意)

我问题的解决办法:

我是由于连接Oracle数据库的时候使用的自己新创建的角色,但是创建的序列是用scott角色创建的,所以自然就找不到我需要用的序列啦,只需要把数据库连接对象更改为拥有该序列的角色(scott)即可,当然也可以在现在这个角色中重新创建一个所需序列啦(创建序列的语法如上所示)。

就是下面这个样子啦:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值