大神们,请帮忙看看。添加了useGeneratedKeys="true" keyProperty="id"到这个SQL中,如下:
<insert id="add" parameterType="Teacher" useGeneratedKeys="true" keyProperty="id">
dao层方法中使用注解add(@Param(“teacher”) Teacher teacher),在调用时,就报错。如下:
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.executor.ExecutorException: Error getting generated key or setting result to parameter object. Cause: org.apache.ibatis.binding.BindingException: Parameter 'id' not found. Available parameters are [telecomOrder, param1]
at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:73)
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:364)
at com.sun.proxy.$Proxy17.insert(Unknown Source)
为什么会把keyProperty="id"中的id当做参数?
配置有错误,
<insertid="insert"useGeneratedKeys="true"keyProperty="id"keyColumn="cc_id"parameterType="Ccbox">keyProperty是实体类的属性,keyColumn是数据库表里面的列名
回复 @阿信sxq:太赞了。sql语句增加注解的内容作为前缀,就可以了。回复 @开心快乐每一天:要么方法声明去掉注解,要么sql语句增加注解的内容作为前缀谢谢。这种方式试过了,还是报一样的错误。像是因为在dao层使用了param注解的原因。最后还是放弃了获得返回主键的方法。 insertid="insert" parameterType="cn.org.lupa.ec.model.Resource" useGeneratedKeys="true"keyProperty="id"></insert>
转载自http://maosiyu.iteye.com/blog/answered_problems
使用selectKey的话,不报错了。但是没取到返回的主键id。用框架,就别自己正各种幺蛾子,id,就对象中有,表中也有,一样的字段,保证没问题。你要用框架,又各种自由发挥的奇葩命名,自找麻烦。谢谢指点。我只是在原项目框架上写代码,并未添加新的注解等内容。@Param(“teacher”)时候keyProperties=" teacher.id"
这个答案解决我的问题博主写得很棒,这里推荐大家一个专注于Java开发的个人博客
Queen'sBlog
(黛玛Queen)
,每天更新文章,干货满满哦,不容错过,需要的点这里咯。
http://www.marsitman.com/mybatis/mybatis-oracle-getid.html
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。