如何解决在 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 举报,一经查实,本站将立刻删除。