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

Spring Data PageRequest不返回指定计数

暨正真
2023-03-14

我正在使用spring数据的分页功能来限制记录获取。我在数据库中有500多个条目,但我只想获取5个条目,但它不能正确返回。大多数情况下,它返回2、3或4条记录(每次返回的记录不到5条,但数据库中有500条)。所以请帮帮我。下面给出了服务类和存储库的代码

服务代码:

    public List<Client> listAll() {
        Pageable pageable = new PageRequest(0,5);
        return (List<Client>) clientRepository.getAllClient(pageable);
       }

存储库代码:

public interface ClientRepository extends CrudRepository<Client, Long> {

@Query("Select distinct p FROM Client p LEFT JOIN FETCH p.offices  LEFT JOIN FETCH p.users LEFT JOIN FETCH p.firmSeats")
public List<Client> getAllClient(Pageable page);
}

共有1个答案

郎弘壮
2023-03-14

这里的问题是您为关联指定的连接获取选项导致的。

如果您考虑通过此语句从DB返回的结果集,则它可能包含每个用户的多条记录,例如,如果客户机x有5个办公室,则结果集中的所有5条记录都将来自客户机x。JPA层中的后处理会将其过滤为1条记录,以便在应用程序中只看到1条记录。

删除JOIN fetch子句以验证情况是否属实。如果是这样的话,您需要考虑为您的查询指定一个自定义countQuery(这实际上会镜像您的主查询,但只返回count):

http://codingexplained.com/coding/java/spring-framework/fetch-query-not-working-spring-data-jpa-pageable

 类似资料:
  • web3.eth.getBlock()方法返回指定块编号或块哈希对应的块。 调用: web3.eth.getBlock(blockHashOrBlockNumber [, returnTransactionObjects] [, callback]) 参数: blockHashOrBlockNumber:String|Number - 块编号或块哈希值,或者使用以下字符串:"genesis"、"

  • web3.eth.getUncle()方法返回指定索引位置的叔伯块。 调用: web3.eth.getUncle(blockHashOrBlockNumber, uncleIndex [, returnTransactionObjects] [, callback]) 参数: blockHashOrBlockNumber:String|Number - 块编号或块的哈希值,或者使用以下字符串:"

  • 注意:这是一个理论性的问题,我并不试图修复任何东西,也不试图为了实际目的达到任何效果 在Scala中使用<code>(参数)创建lambda时= Lambdas与方法没有什么不同,它们都被指定为表达式,但就我的理解,方法的返回类型很容易用< code > def name(arguments):return type = expression 语法来定义。 考虑这个(说明性的)例子:

  • web3.eth.getTransaction()方法返回具有指定哈希值的交易对象。 调用: web3.eth.getTransaction(transactionHash [, callback]) 参数: transactionHash:String - 交易的哈希值 callback:Function - 可选的回调函数,其第一个参数为错误对象,第二个参数为返回结果。 返回值: 一个Pro

  • web3.eth.getBalance()方法用来获取指定块中特定账户地址的余额。 调用: web3.eth.getBalance(address [, defaultBlock] [, callback]) 参数: address:String - 要检查余额的账户地址 defaultBlock:Number|String - 可选,使用该参数覆盖web3.eth.defaultBlock属性

  • 这是我的实际服务方法。在测试时,它给我的变量为空。用户和响应 我试图写一个测试用例和模拟方法findByEmail()和保存(),但同时嘲笑我没有收到用户对象在返回中提到的thenback()和doback()。 有人能帮忙吗。