文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

nested exception is org.apache.ibatis.type.TypeException: Could not set parameters for mapping错误的决方法

2023-09-12 09:21

关注

文章目录

1. 复现错误


今天写好hive表导入的回调的接口,如下代码所示:

@ResponseBody@PostMapping(value = "/xxx/importTables/callback")public ServiceStatusData callbackLocalHiveImportTables(    @RequestParam("missionId") String missionId) {  logger.info("mock数据的入参记录:missionId={}", missionId);  if (isBlank(missionId)) {    return new ServiceStatusData(ServiceStatusData.Status.Fail, "入参错误:缺少任务id", null);  }  return hiveImportTaskService.callbackLocalHiveImportTables(missionId);}

启动postman访问该接口,确报出如下错误:

在这里插入图片描述

nested exception is org.apache.ibatis.type.TypeException: Could not set parameters for mapping: ParameterMapping{property='missionId', mode=IN, javaType=class java.lang.Long, jdbcType=null, numericScale=null, resultMapId='null', jdbcTypeName='null', expression='null'}

2. 分析错误


根据nested exception is org.apache.ibatis.type.TypeExceptio可知,这是mybatis的类型异常错误。

其次,再将错误信息Could not set parameters for mapping: ParameterMapping...,翻译成中文无法设置映射的参数:参数映射

ParameterMapping清晰的toString的代码如下所示:

{property='missionId', mode=IN,  javaType=class java.lang.Long,  jdbcType=null,  numericScale=null,  resultMapId='null',  jdbcTypeName='null',  expression='null'}

属性(property)为missionId,类型(javaType)为java.lang.Long,但为什么无法设置映射的参数呢?

首先经过打断点的方式,来定位错误之处,如下代码所示:

在这里插入图片描述

由断点可以初步判断,问题可能出现在hiveImportTaskMapper.updateCallbackTimeByMissionId(missionId);方法中,继续断点往下走:

在这里插入图片描述

由此可以确定,问题出现在hiveImportTaskMapper.updateCallbackTimeByMissionId(missionId);方法中。

于是,进入到hiveImportTaskMapper.updateCallbackTimeByMissionId(missionId)方法,如下代码所示:

@Mapper@Repositorypublic interface HiveImportTaskMapper {Long updateCallbackTimeByMissionId(String missionId);}

接着进入到hiveImportTaskMapper.xml文件中,找到id = updateCallbackTimeByMissionIdupdate标签,如下代码所示:

<update id="updateCallbackTimeByMissionId" parameterType="java.lang.Long">    UPDATE         hive_import_task     SET         call_back_time = NOW() ,         update_time = NOW()     where         deleted = 0 and mission_id = #{missionId}update>

可以清晰地看到:

  1. HiveImportTaskMapper类中的updateCallbackTimeByMissionId(missionId);方法的形参是String类型

  2. hiveImportTaskMapper.xml文件中的parameterTypeLong类型。

在这里插入图片描述

因而,类型不一致才说无法设置映射的参数。

3. 解决错误


既然是 HiveImportTaskMapper类中的updateCallbackTimeByMissionId(missionId);方法的形参类型和hiveImportTaskMapper.xml文件中的parameterType类型不一致,导致了这个错误,可进行如下修改。

hiveImportTaskMapper.xml文件中的parameterType类型,修改为java.lang.String即可,如下代码所示:

<update id="updateCallbackTimeByMissionId" parameterType="java.lang.String">    UPDATE        hive_import_task    SET        call_back_time = NOW() ,        update_time = NOW()    where        deleted = 0 and mission_id = #{missionId}update>

在这里插入图片描述

重新启动项目,再次使用postman测试,方可成功运行,如下图所示:

在这里插入图片描述

来源地址:https://blog.csdn.net/lvoelife/article/details/129753920

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯