解决MyBatisSystemException: selectOne(Unknown Source)

报错信息

2020-11-06 12:13:24.241 ERROR 179946 --- [http-nio-7001-exec-9] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception[Request processing failed; nested exception is org.mybatis.spring.MyBatisSystemException] with root cause

org.mybatis.spring.MyBatisSystemException: null
  at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:81)
  at sun.reflect.GeneratedMethodAccessor191.invoke(Unknown Source)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  at java.lang.reflect.Method.invoke(Method.java:498)
  at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:434)
  at com.sun.proxy.$Proxy163.selectOne(Unknown Source)
  at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:167)
  at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:75)
  at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:53)

原因分析

我遇到该报错的原因是,根据task_id查询task结果时,==单条查询返回了多条结果==。

解决方案

临时的解决方案是限制查询返回,即在查询语句末尾加了“ limit 1”

    <select id="getTaskResultByTaskId" parameterType="java.lang.Integer" resultMap="taskResultDO">
        select *
        from ats_task_result
        where task_id = #{taskId} limit 1
    </select>

最终解决的办法是,存task结果时,先根据task id查询是否已经存在;如果已经存在则更新结果,否则插入新的数据

发布者:CoolQA,转转请注明出处:https://www.amwalle.com/se/database/20201117-%e5%8e%9f%e5%88%9b-%e8%a7%a3%e5%86%b3mybatissystemexception-selectoneunknown-source.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
CoolQA的头像CoolQA
上一篇 2020年9月23日 13:46
下一篇 2020年12月17日 13:26

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理