微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Spring Data JPQL join 查询中计数抛出 IllegalArgumentException

如何解决在 Spring Data JPQL join 查询中计数抛出 IllegalArgumentException

我在 Spring Data 的注解 @Query 中有一个使用 JPQL 的查询,如下所示

@Query(value = "select distinct a from EntityA as a left join fetch a.listEntityB as b where ...")
  public List<EntityA > find....(@Param("") String value,Pageable pageable);

现在我需要知道查询的总记录数。由于 Pageable 给了我部分列表,我正在编写另一个没有 Pageable 的计数查询。我的计数查询如下所示:

@Query(value = "select count(distinct a) from EntityA as a left join fetch a.listEntityB as b where ...) 
  public long count...(@Param("") String value);

但是,我从该查询中收到“IllegalArgumentException: Validation Failed for query”错误以计算记录数。当我将计数查询更改为 "select count(distinct a) from EntityA" 时,它工作正常。我不确定使用连接时有什么问题。到目前为止,我没有得到任何有用的文件。是否有更好的解决方案来获取 Pageable 查询的总记录数。

解决方法

将 CountQuery 放在与查询本身相同的注释中。所以

@Query(value = "select ...",countQuery = "select count..")
public List<EntityA > find....(@Param("") String value,Pageable pageable);

同时从 countQuery 中删除“fetch”。

要获取总记录数,您只需引用 page.getTotalElements() 即可返回总记录数。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。