【问题标题】:IncorrectResultSizeDataAccessException - Trying to simply get the most recent rowIncorrectResultSizeDataAccessException - 试图简单地获取最新的行
【发布时间】:2014-10-16 18:06:16
【问题描述】:

我有一个名为“ImportReceiptRepository”的 Spring CrudRepository。

我只是想编写一个方法来获取 order by 子句中的第一行。

这是我目前正在使用的:

ImportReceipt importReceipt = this.importReceiptRepository.getOneByImportTypeOrderByTimestampDesc(importType);

问题是当返回多于一行时,Spring 会抛出:

org.springframework.dao.IncorrectResultSizeDataAccessException: result returns more than one elements; nested exception is javax.persistence.NonUniqueResultException: result returns more than one elements

当返回 0-n 行时,我应该如何重命名这个 CrudRepository 函数以简单地抓取第一行?

【问题讨论】:

    标签: java sql spring spring-data


    【解决方案1】:

    简单地使用 Pageable 是关键:

    List<ImportReceipt> findByImportType(String importType, Pageable pageable);
    

    并这样称呼它:

    List<ImportReceipt> importReceipts = this.importReceiptRepository.findByImportType(importType, new PageRequest(0, 1, Direction.DESC, "Timestamp"));
    ImportReceipt importReceipt = importReceipts.get(0);
    

    信用:How to combine pagination with a criteria query in Spring Data JPA?

    【讨论】:

      【解决方案2】:

      在即将发布的 Spring Data JPA 1.7 版中,您最初声明的查询方法可以开箱即用。有关详细信息,请参阅this ticket。该支持已在该版本的第一个里程碑中发布。

      【讨论】:

        【解决方案3】:

        你可以通过 findFirst 让它变得更简单:

        ImportReceipt findFirstByImportType(String importType);
        

        欲了解更多信息:Limiting Query Results

        【讨论】:

          猜你喜欢
          • 2017-05-02
          • 2014-01-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-07-15
          • 2015-05-21
          相关资源
          最近更新 更多