如何在 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
层中同时使用nativeQuery
和countQuery
作为:
@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
返回的整数计数,并且我想使用该计数来构造我想用于 nativeQuery
的 PageRequest
对象以获取 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:如何有条件地获取子实体