NonUniqueResultException

在分页查询时报异常NonUniqueResultException,错误信息为query did not return a unique result:
经过定位排查后问题解决,分析过程如下
1.网上相关资料几乎都是说数据库里有重复的数据,或者接收值为一个对象但返回的是一个list,但是查看数据库后发现并没有重复数据,方案对解决思路帮助不大

2.定位到报错的源码处,如图所示,使用分页查询方法getPaginationForSql时,会生成一个countSql,截取后到naviCat上运行

3.再回头查看自己的查询sql,找到问题原因:
由于业务逻辑(别人实现的代码),sql为一个嵌套查询,结构为
select XXX from (select XXX from XXX group by XXX) group by XXX
而前面的生成countSql是默认去掉头部的select XXX from,即
select count(*) from (select XXX from XXX group by XXX ) group by XXX
注意此时后面仍然保留了外层查询的sql语句group by XXX,导致返回结果异常

4.问题解决办法 - 不使用DAO的JPA而是采用sql中的limit形式进行分页查询(sql太复杂不想再优化实现逻辑,尽量少改动原代码的基础上完善需求)
sql += " limit " + (pageIndex - 1) * pageSize + "," + pageSize;

posted @ 2020-06-09 15:15  舌尖上的皮卡丘  阅读(2184)  评论(0)    收藏  举报