Java TotalElements返回的总数据表行的值不正确
我想实现一个返回分页请求/响应的查询Java TotalElements返回的总数据表行的值不正确,java,spring,spring-boot,jpa,spring-data-jpa,Java,Spring,Spring Boot,Jpa,Spring Data Jpa,我想实现一个返回分页请求/响应的查询 @Repository @SuppressWarnings("all") public interface OfferingsRepository extends JpaRepository<Offerings, UUID>, CustomJpaSpecificationExecutor<Offerings> { ....... } @存储库 @抑制警告(“全部”) 公共接口Off
@Repository
@SuppressWarnings("all")
public interface OfferingsRepository extends JpaRepository<Offerings, UUID>,
CustomJpaSpecificationExecutor<Offerings> {
.......
}
@存储库
@抑制警告(“全部”)
公共接口OfferingRepository扩展了JpaRepository,
CustomJpaSpecificationExecutor{
.......
}
向包含23行的表中发出请求:
Page<Offerings> all = offeringsRepository .findAll(
new Offerings(searchCriteria, relevance),
PageRequest.of(0, 20));
long count = all.getTotalElements();
Page all=offeringsRepository.findAll(
新产品(搜索标准、相关性),
第(0,20)页);
long count=all.getTotalElements();
计数应该是23,但我得到20。我不明白为什么我得到了价值20。应该是23。您知道如何解决此问题。您需要在API中提供一个单独的countQuery。默认情况下,您将获得findAll()方法返回的记录数,该方法返回的记录数为前20 界面的示例代码:
@Query(name = "SELECT offr FROM Offerings offr", countQuery = "SELECT count(offr) FROM Offerings offr")
Page<Offerings> findAll();
@Query(name=“从产品销售人员中选择销售人员”,countQuery=“从产品销售人员中选择销售人员”)
Page findAll();
您需要在API中提供一个单独的countQuery。默认情况下,您将获得findAll()方法返回的记录数,该方法返回的记录数为前20
界面的示例代码:
@Query(name = "SELECT offr FROM Offerings offr", countQuery = "SELECT count(offr) FROM Offerings offr")
Page<Offerings> findAll();
@Query(name=“从产品销售人员中选择销售人员”,countQuery=“从产品销售人员中选择销售人员”)
Page findAll();
不幸的是,此代码位于lib下,我无法修改。还有其他解决方案吗?是否可以通过某种方式扩展findAll()
以包括countQuery=“SELECT count(offr)FROM provides offr”
,而不添加查询,因为我有一个复杂的规范和内部联接?您可能需要复制这些条件才能获得准确的计数。不幸的是,你不能扩展它。还有一个问题。我可以在上面粘贴的本机查询中使用我的自定义构建规范吗?我从未尝试过。您应该能够使用带有规范的countQuery。这是一个JPQL。不幸的是,这段代码位于lib下,我无法修改它。还有其他解决方案吗?是否可以通过某种方式扩展findAll()
以包括countQuery=“SELECT count(offr)FROM provides offr”
,而不添加查询,因为我有一个复杂的规范和内部联接?您可能需要复制这些条件才能获得准确的计数。不幸的是,你不能扩展它。还有一个问题。我可以在上面粘贴的本机查询中使用我的自定义构建规范吗?我从未尝试过。您应该能够使用带有规范的countQuery。这是一个JPQL。