dao 层接口
int insert(@Param("node") Node node);
xml 文件
<insert id="insert" parameterType="cn.roothub.bbs.module.node.model.Node" keyProperty="nodeId" useGeneratedKeys="true">
报错信息
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 'nodeId' not found. Available parameters are [node, param1]
提示获取自增主键时失败,无法找到 nodeId 字段。
可是我明明有 nodeId 字段,get/set 方法也有,怎么会找不到呢?
解决方法
原来是我的 dao 层接口使用了@Param 注解,所以这时候直接指定 keyProperty 属性是无效的,这时候需要通过注解定义的对象名.属性。
比如我指定的参数名是 @Param(“node”),那么 keyProperty 就要指定为 node.nodeId
keyProperty="node.nodeId"
这样就能获取到自增主键了
如果你不用 @Param 注解指定参数的名字,那么直接通过 nodeId 是可以获取到自增主键的。