如何在 Spring Data JPA 中获取 countQuery 返回的计数?

Posted

技术标签:

【中文标题】如何在 Spring Data JPA 中获取 countQuery 返回的计数?【英文标题】:How to get count returned by countQuery in Spring Data JPA? 【发布时间】:2022-01-17 21:44:04 【问题描述】:

我在Repository 层中同时使用nativeQuerycountQuery 作为:

@Query(value = "select * FROM Person p where p.forename = :forename and p.surname = :surname",
countQuery = "SELECT count(*) FROM Person p where p.forename = :forename",
  nativeQuery = true)
User findByForenameAndSurname(@Param("surname") String lastname,
                             @Param("forename") String firstname);

我想要这个 countQuery 返回的整数计数,并且我想使用该计数来构造我想用于 nativeQueryPageRequest 对象以获取 Page 对象。我可以在构造PageRequest 对象之前访问此计数吗? 有什么办法可以得到countQuery返回的值吗?

【问题讨论】:

不,没有办法期望您只为 cound 创建其他查询。但我不明白你为什么需要计数。 @simon-martinelli 我的计数查询表示我想返回给用户的记录数,这是对象的实际计数,但我的本机查询返回多行(有点有 4 个不同的行表中有一个 obj)。我需要这个计数来形成我的原生查询 【参考方案1】:

如果您需要该页面,只需将其返回:

@Query(value = "select * FROM Person p where p.forename = :forename and p.surname = :surname",
      countQuery = "SELECT count(*) FROM Person p where p.forename = :forename",
      nativeQuery = true)
Page<User> findByForenameAndSurname(@Param("surname") String lastname,
                             @Param("forename") String firstname);

Page 对象将包含您需要的所有内容。

【讨论】:

谢谢。但是假设 countQuery 返回计数为 1,而我的 nativeQuery 返回 4 条记录,那么我的页面对象将有 4 条记录还是 1 条记录? 如果是这种情况,您就违反了规则。 Count 必须返回查询将返回的数字!!!!

以上是关于如何在 Spring Data JPA 中获取 countQuery 返回的计数?的主要内容,如果未能解决你的问题,请参考以下文章

Spring Data JPA:查询ManyToMany,如何从映射类中获取数据?

如何在实现 Spring Data JPA AuditorAware 接口时获取 getUserPrincipal().getUserName()

如何在本机查询中使用 NVL 或 COALESCE 获取 Spring Data JPA 中的值列表

Spring Data JPA Repository:如何有条件地获取子实体

如何在 Spring Data JPA 中使用带有分页的投影接口?

如何在 Spring Data JPA 中使用 CTE 表达式 WITH 子句