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

如何返回数据库中全部联系人?JPA查询非唯一结果报错解决

问题分析与解决

报错“查询未返回唯一结果:2”的核心原因:你的JPA Repository方法getAllContacts()声明返回单个User对象,但执行SELECT * from USER会返回数据库中所有用户记录(当前有2条),JPA无法将多条结果映射到单个实体,因此抛出异常。

1. 修改JPA Repository代码

将方法返回类型改为集合List<User>,如果不需要自定义原生SQL,直接用Spring Data JPA提供的默认方法更简洁:

// 方式一:用Spring Data JPA默认方法,无需自定义查询
List<User> findAll();

// 方式二:保留自定义原生SQL,修改返回类型
@Query(value = "SELECT * from USER", nativeQuery = true)
List<User> getAllContacts();

2. 修改控制器代码

接收集合类型的查询结果,将集合命名后添加到视图模型中:

public ModelAndView getAllContacts() {
    ModelAndView mav = new ModelAndView("getAllUser.jsp");
    List<User> userList = userda.getAllContacts(); // 或调用userda.findAll()
    mav.addObject("userList", userList); // 给集合命名,方便视图层调用
    return mav;
}

3. 视图层(getAllUser.jsp)适配修改

在JSP中遍历集合展示所有联系人(需引入JSTL标签库):

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<body>
    <h1>所有联系人</h1>
    <ul>
        <c:forEach items="${userList}" var="user">
            <li>${user.toString()}</li>
        </c:forEach>
    </ul>
</body>
</html>

额外说明

  • 方法命名尽量贴合Spring Data JPA规范,比如findAll比getAllContacts更符合框架约定,能减少自定义查询的编写。
  • 实体类User的映射配置已正确匹配数据库表名,无需调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 18:48:23