根据Spring文档https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.special-返回List
的参数不应发出计数查询。
但是随着我的Spring,它变得有点奇怪。
当使用page1
运行页面请求时,它不需要计数查询,我认为这是正确的。
但当我使用页面2
(或以上)调用存储库时,它突然在选择查询之后执行了一个计数查询,这是我没有预料到的。
有没有什么方法可以让计数查询不使用分页发出?
我所做的存储库和服务代码。
@Repository
public interface ArticleRepository extends CrudRepository<Article, Long> {
// Slice was also tested and did issue count query from page 2
List<Article> findAll(Pageable pageable);
}
@Service
public class ArticleService {
private final ArticleRepository articleRepository;
@Autowired
public ArticleService(
ArticleRepository articleRepository) {
this.articleRepository = articleRepository;
}
public List<Article> getArticles(int page) {
PageRequest pageRequest = PageRequest.of(page, 50, Sort.by("createdAt").descending());
return articleRepository.findAll(pageRequest);
}
}
在公共页面的源代码中
if (content.size() != 0 && pageable.getPageSize() > content.size()) {
return new PageImpl<>(content, pageable, pageable.getOffset() + content.size());
}
return new PageImpl<>(content, pageable, totalSupplier.getAsLong());
因此,您不能使用默认的存储库方法来避免它。在
PagingAndSortingRepository
类下指定您自己的jpa方法或声明查询注释。
如果您需要扩展CrudRepository,那么您将能够在存储库中使用Slice定义方法:
Slice<Article> findAll(Pageable pageable);
我认为另一个选择是将超级接口改为< code > PagingAndSortingRepository 。它可以解决使用< code>List返回的问题。
interface ArticleRepository extends PagingAndSortingRepository<Article, Long> {
List<Article> findAll(Pageable pageable);
}
我想知道是否可以禁用查询类型,或者是否可以有用于筛选上下文? ES版本:6+ 例如: 此查询将搜索或中的匹配项,并进行得分计算 此查询将筛选在和中匹配的文档,并且不会进行分数计算。不是我需要的,因为它使用和 我的目标是排除相同查询的性能故障,有和没有分数。所以我有第一个有分数的查询。如何编写没有分数的第二个查询? 谢了。
我们正在使用Spring Data JPA Repository。对于分页,我们将Pageable对象传递给JPA Repository findBy Methods。 因为在我们的UI中,我们不显示记录的总计数,所以我们不希望触发计数查询。有没有办法抑制分页期间触发的计数查询?
在使用Micronaut数据执行显式查询(@query)时,是否可以给出一个countQuery示例来实现分页?在中没有示例https://micronaut-projects.github.io/micronaut-data/latest/guide/#explicitQueries 我必须提出一个如下的问题
SpringDataJpa中 Specification怎样使用in查询 实体类Menu.java如下 想通过roles属性做in查询,代码如下 错误如下: Parameter value [com.appmtce.pojo.entity.role.Role@20f81e2a] did not match expected type [java.util.Collection (n/a)] 我的S
查询分数 查询分数。可供游戏场景使用。查询用户当前互动实例下的成就值。 /** * Tida.queryScore 获取游戏分数后的回调函数数据 * @param {Object} result 结果数据 * @param {number} result.errorCode 为0时成功 其它值失败 * @param {number} result.maxPoint 最大值(比如,最短时间)
问题内容: 我想按数据库中的条件计数记录数。 我尝试使用下一个查询 但是没有方法可以执行此操作并获得结果。 我知道,我可以使用 所以问题是,查询是否具有更高的性能?如果,那么我该如何执行查询呢? 问题答案: 您可以通过调用来执行第一个查询,例如。 如果要将计数分配给变量,则需要将其转换为适当的类型(它可以取决于DB,但很可能是Long)。第二个查询效率很低,因为Hibernate需要从数据库中检索