小编Bur*_* N.的帖子

Jpa 标准 API 计数

我一直在尝试获取总行数并这样做,我使用了 JPA Criteria API,但它在Long count = em.createQuery(sc).getSingleResult();line处抛出错误并说java.lang.IllegalStateException: No criteria query roots were specified. 我做了一些研究,但无法缩小问题的范围。

这是我的代码片段;

@PersistenceContext
    public EntityManager em;

......

public Page<UserDTO> findByCriteria(String filters, Pageable pageable) {
        CriteriaBuilder cb = em.getCriteriaBuilder();
        CriteriaQuery<UserDTO> cq = cb.createQuery(UserDTO.class);
        Root<UserDTO> iRoot = cq.from(UserDTO.class);
        List<Predicate> predicates = new ArrayList<Predicate>();

        if (StringUtils.isNotEmpty(filters)) {
            predicates.add(cb.like(cb.lower(iRoot.<String>get("login")), "%" + filters.toLowerCase() + "%"));
        }

        Predicate[] predArray = new Predicate[predicates.size()];
        predicates.toArray(predArray);

        CriteriaQuery<Long> sc = cb.createQuery(Long.class);
        sc.select(cb.count(iRoot));

        sc.where(predArray);
        Long count = em.createQuery(sc).getSingleResult();

        cq.where(predArray);

        List<Order> orders = new ArrayList<Order>(2); …
Run Code Online (Sandbox Code Playgroud)

java jpa criteria-api spring-data-jpa

5
推荐指数
1
解决办法
3902
查看次数

标签 统计

criteria-api ×1

java ×1

jpa ×1

spring-data-jpa ×1