当前位置: 首页 > 知识库问答 >
问题:

获取“查询未返回唯一结果”错误。我该怎么修?

尉迟景福
2023-03-14

我有一个包含各种表和东西的数据库,我使用一个相当大的SQL查询,它从所有表中收集值并对其进行排序,以便我可以轻松地将结果导出为CSV。

我创建了一个存储过程,通过Java触发查询。为此,我决定使用表的存储库,它只存储上次点击按钮的用户的名称,即该操作的时间戳,因为我想避免创建一个新实体。

当我手动执行查询时,我得到了155行的正确结果。但当我点击按钮时,它会抛出一个错误:

Caused by: javax.persistence.NonUniqueResultException: query did not return a unique result: 155

155很好。我做错了什么?我需要做些什么才能让它发挥作用?

这里有一个小概述:

@Repository
public interface LogReportRepository extends JpaRepository<LogReport, Long>, Serializable {
    
        @Query(value = "CALL FORMAT_REPORT_DATA(:vonMonatParam,:bisMonatParam,:aggregationThresholdParam,:teamParam);", nativeQuery = true)
        ResultSet formatReportData(@Param("vonMonatParam") LocalDateTime fromMonth,
                                   @Param("bisMonatParam") LocalDateTime untilMonth,
                                   @Param("aggregationThresholdParam") int aggregationThreshold,
                                   @Param("teamParam") int team);
    }
@Service
public class LogReportImpl implements LogReportService {

    @Autowired
    LogReportRepository logReportRepository;


    @Override
    public ResultSet formatReportData(LocalDateTime fromMonth, LocalDateTime untilMonth, int aggregationThreshold, int team) {
        return logReportRepository.formatReportData(fromMonth,untilMonth,aggregationThreshold,team);
    }
}
public interface LogReportService {
    
    ResultSet formatReportData(LocalDateTime fromMonth, LocalDateTime untilMonth, int aggregationThreshold, int team);
}

我用wicket做了一个测试网站,并把它放在一个按钮后面。下面是按钮的类:

public class FormatButton extends Button {

    @SpringBean
    public LogReportService logReportService;

    public FormatButton(String id, IModel<String> model) {
        super(id, model);
    }

    @Override
    public void onSubmit() {
        LocalDateTime fromMonth = LocalDateTime.of(2022,6,30,23,59,0);
        LocalDateTime untilMonth = LocalDateTime.of(2022,8,1,0,0,0);
        int aggregationThreshold = 37;
        int team = 1;

        ResultSet resultSet = logReportService.formatReportData(fromMonth,untilMonth,aggregationThreshold,team);
    }
}

共有1个答案

巫马磊
2023-03-14

该错误告诉您Spring数据期望的是单个结果,而不是155。

我认为问题是formatReportData的签名没有返回集合。如果ResultSet是一个实体或DTO,它应该是:

@Query(...)
List<ResultSet> formatReportData(...);

或者,您可以使用更通用的:

@Query(...)
List<Object[]> formatReportData(...);
 类似资料:
  • 我想创建一个日历对象,并将其设置为某一年和该年中的一周。 当我将calendar对象传递给setWeekChecked方法时,这是它的toString: java.util.gregoriancalendar[time=?,arefieldsset=false,lenient=true,zone=America/New_York,firstDayofWeek=1,minimalDaysinfirs

  • 我正在将我的PHP代码从mysql更新到mysqli,但我似乎找不到这个问题的答案:mysqli更新查询是否返回结果? 使用mysql,我可以 即使该查询不返回任何行,也将为true。 现在,在mysqli代码中,我有如下内容(为了清晰起见,删除了错误处理): 结果是错误的。 对于记录来说,查询是有效的(忽略我可能在将其转录到stackoverflow中时犯的任何错别字),字段1在数据库中按预期正

  • 问题内容: 我正在使用Newtonsoft的Json.Net从以下json中选择节点: 以下C#代码段 产量: 现在,这很酷,我想做的是按客户端代码过滤,我认为 可以,但是我显然对语法不够了解。这将返回一个空列表: 并且单个令牌选择器返回null: 我在https://jsonpath.curiousconcept.com/上尝试了几种不同的配置,看来我的查询语法确实坏了。 使用Flow Comm

  • 我在使用MongoDB查询时遇到问题。每当我尝试通过ID或任何其他字段查找时,我总是得到零结果返回。我也很难使用“like”操作符。 我想以不区分大小写的方式查询书名。而且我知道你可以在MongoDB中这样做: 我试着装腔作势地做,但我不能让它起作用: 我看到控制台上打印出以下行:{“title”:{“$regex”:“/^harr.*/I”}} 我也尝试过一个文档,但也不成功: 结果却是零。 这

  • 问题内容: 我有一堆应聘者,他们有一些或多个工作,每个人都在公司工作,并且使用了一些技能。 坏的ascii艺术如下: 这是我的数据库: 。 。 。 。 这是我对查询的尝试(请注意,我打算将通配符更改为字段名称;我只是想使某些功能生效): HediSql说 查询出了什么问题?我希望从不良的ascii艺术中可以清楚地知道我要达到的目标。 (此外,它对我连接表的顺序是否有任何速度差异?我将担心新的MyS

  • 我正在查询SQL数据库,但由于某些原因,结果项会随机返回。这是我的密码: searchFriendEmailArrayNew是一个电子邮件地址数组,因此当我查询数据库表时,它会使用电子邮件来查找该用户。数组始终保持一致且顺序相同: user1@email.com 查询总是按照这个顺序进行的。 然后,我查询用户的所选字段,在本例中,我查询的是“isriding”字段。此字段是返回true或false