JAVA_peakedness 2017-08-14 13:58 采纳率: 40%
浏览 1531
已采纳

mybatis中的延迟加载问题,拜托各位大神

这个是报错:
32acceba-7d07-11e7-acb7-14dda920ec0e::多的一方1
.......
Exception in thread "main" org.apache.ibatis.executor.ExecutorException: Statement returned more than one row, where no more than one was expected.
at org.apache.ibatis.executor.ResultExtractor.extractObjectFromList(ResultExtractor.java:50)
at org.apache.ibatis.executor.loader.ResultLoader.loadResult(ResultLoader.java:71)
at org.apache.ibatis.executor.loader.ResultLoaderMap$LoadPair.load(ResultLoaderMap.java:207)
at org.apache.ibatis.executor.loader.ResultLoaderMap$LoadPair.load(ResultLoaderMap.java:172)
at org.apache.ibatis.executor.loader.ResultLoaderMap.load(ResultLoaderMap.java:80)
at org.apache.ibatis.executor.loader.cglib.CglibProxyFactory$EnhancedResultObjectProxyImpl.intercept(CglibProxyFactory.java:147)
at com.mybatis.pojo.TableMany$$EnhancerByCGLIB$$49d2b6d7.getOneList()
at com.mybatis.test.ManayToOne.findMany(ManayToOne.java:62)
at com.mybatis.test.ManayToOne.main(ManayToOne.java:28)

这个是测试代码:
static TableManyMapper mapper=null;
public static void main(String[] args) throws Exception {

      String resource="mybatis.xml";
      InputStream input=Resources.getResourceAsStream(resource);    
      SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(input);
      SqlSession sqlSession = factory.openSession();
         mapper=sqlSession.getMapper(TableManyMapper.class);

         findMany();

        sqlSession.commit();
}

     public static void findMany(){ 
        List<TableMany> list= mapper.findMany();
        for (TableMany tableMany : list) {
            System.out.println(tableMany.getM_id()+"::"+tableMany.getM_name());
            System.out.println(".......");
                List<TableOne> oneList=tableMany.getOneList();
                for (TableOne tableOne : oneList) {
                    System.out.println(tableOne.getO_id()+"::"+tableOne.getO_name());
                }

        }
     }

这个是mapper配置:








select * from table_many

  <select id="findLazyOne" parameterType="java.lang.String"  resultType="tableOne" >
    select * from table_one t where t.m_id=#{value}
  </select>
  • 写回答

3条回答 默认 最新

  • 砸死接触 2017-08-15 00:34
    关注

    看报错信息是你的方法本来要求查询的语句只能返回一行数据,但是在真正查询的时候出现了两条或更过,所以报错了。看看数据库m_id会不会有重复的?

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • Humorist 2017-08-15 02:36
    关注

    楼上说的对,你看看你的sql语句

    评论
  • 鼠晓 博客专家认证 2017-08-15 05:09
    关注
     <select id="findLazyOne" parameterType="java.lang.String"  resultType="tableOne" >
        select * from table_one t where t.m_id=#{value}
      </select>
    

    你居然写*,,,,,很危险,,纠正一下,,开发中尽量不要写 *

    (1)不好看出检索的列(2)*留给数据库解析,,影响效率。

    你的mapper ,resultType="tableOne" ,,没有上传上来,,

    报错:

     Statement returned more than one row, where no more than one was expected.
    声明返回的不止一行,其中不超过预期。
    
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 已采纳回答 6月15日

悬赏问题

  • ¥15 关于网上一个easyx制作的见缝插针小游戏(c++)
  • ¥15 开地址法双散列函数处理碰撞
  • ¥15 想问一下这个是什么情况 虚拟机Linux打不开了
  • ¥15 联通光猫掉注册了怎么重新注册上去
  • ¥15 关于unity开发steamvr程序遇到的问题
  • ¥60 求tc downloader的下载方式
  • ¥15 华为 快捷方式 手电筒 接口
  • ¥15 Qt6.5支不支持Android13开发啊
  • ¥20 网络只能跑一半,应该如何设置
  • ¥20 Python调用百度开发者平台人脸识别接口