You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Data JPA非唯一结果异常求助:查询返回2条结果

NonUniqueResultException 异常定位与解决

核心原因

NonUniqueResultException 本质是你调用了期望返回唯一结果的查询方法(比如JPA的getSingleResult()),但数据库中匹配条件的记录不止1条(这里是2条),导致框架抛出异常。

具体排查方向

  • 检查Repository层的查询方法:
    • 确认是否误用了findOne()、getSingleResult()这类要求唯一结果的方法,而你的业务场景实际需要返回多条用户提交的答案。
    • 核对查询条件的精准度:比如是否仅按cid或qid查询,但数据库中存在多条相同cid+qid的submissions记录(你的表主键是subid,cid+qid并非唯一约束)。
  • 验证数据库数据:
    • 直接执行Repository对应的SQL语句(例如SELECT * FROM submissions WHERE cid = ? AND qid = ?),确认返回的记录数是否大于1。即便重建过表,测试数据或用户提交的数据仍可能存在重复条件的记录。
  • 对比正常表的差异:
    • 检查另一张同结构表的业务逻辑:是否在查询时保证了条件的唯一性,或是使用了findAll()这类返回集合的方法,而非单一结果方法。
    • 核对两张表的约束:另一张表是否给cid+qid添加了唯一约束,而当前表没有,导致出现多条匹配记录。

修复建议

  • 如果业务需要返回多条答案,将Repository中的查询方法改为返回List<Submissions>,使用findAllByXXX()这类方法,同时调整Service和Controller层的逻辑以处理集合数据。
  • 如果业务逻辑要求查询条件必须返回唯一结果,需要:
    1. 在数据库表中给cid+qid添加唯一约束,避免重复数据插入。
    2. 补充更多唯一标识条件(比如加上subid或用户ID),确保查询结果唯一。

内容的提问来源于stack exchange,提问作者epicUsername

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 13:57:02