做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)即可,当然也可以在现在这个角色中重新创建一个所需序列啦(创建序列的语法如上所示)。
就是下面这个样子啦: