gpt4 book ai didi

java - Spring data JpaRepository 分页和分组依据

转载 作者:太空宇宙 更新时间:2023-11-04 09:44:17 25 4
gpt4 key购买 nike

在我的 JpaRepository 接口(interface)中,我得到了以下工作正常的方法:

Page<PermissionRule> findByOrganizationIdAndTypeStringAndObjectReferenceIgnoreCaseContaining(
Long organizationId, String typeId, String searchTerm, Pageable pageable);

我需要的是与 group by object_reference 相同的查询。

这就是我尝试做的:编辑

@Query(value = "SELECT object_reference, dst_type, other FROM permission_rule pr WHERE pr.organization_id = %?1% AND pr.dst_type_id = %?2% AND pr.object_reference LIKE %?3% GROUP BY object_reference", nativeQuery = true)
Page<PermissionRule> getFunds(Long organizationId, String dstTypeId, String searchTerm, Pageable pageable);

但我收到以下错误

InvalidJpaQueryMethodException: Cannot use native queries with dynamic sorting and/or pagination in method

此外,如果它对我想在 GROUP BY 中使用的实体列有帮助,则为

@Column(name = "object_reference", nullable = false)
private String objectReference;

我的问题是是否有更简单的方法来做到这一点,或者我仍然需要自定义查询(我是否需要在实体中移动自定义查询或改为使用命名查询?)?

最佳答案

当您想要聚合结果时,通常使用 groupBy。在这里,您正在执行 select * 而不是聚合。

@Query("SELECT l.someCol, count(*) as numOfRows from SomeTable l GROUP BY l.someCol")
Page<Something> findSomething(Pageable pageable);

Something 对象可以是一个带有 someCol 和 numOfRows 的 getter 方法的接口(interface)。

如果您使用 native 查询,则需要使用 countQuery

@Query(value = "SELECT someCol, count(*) as numRows from SomeTable GROUP BY someCol",
countQuery= "SELECT count(*) FROM (SELECT someCol, count(*) as numRows from SomeTable GROUP BY someCol)",
nativeQuery=true)
Page<Something> findSomething(Pageable pageable);

关于java - Spring data JpaRepository 分页和分组依据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55613291/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com