小编sta*_*ker的帖子

如何计算通用JPA DAO中JPA 2 CriteriaQuery的行数?

我是JPA的新手,想要实现一个通用的JPA DAO,需要找到查询结果集的行数来实现分页.搜索网络后,我找不到切实可行的方法.以下是许多文章中建议的代码:

public <T> Long findCountByCriteria(CriteriaQuery<?> criteria) {
    CriteriaBuilder builder = em.getCriteriaBuilder();

    CriteriaQuery<Long> countCriteria = builder.createQuery(Long.class);
    Root<?> entityRoot = countCriteria.from(criteria.getResultType());
    countCriteria.select(builder.count(entityRoot));
    countCriteria.where(criteria.getRestriction());

    return em.createQuery(countCriteria).getSingleResult();
}
Run Code Online (Sandbox Code Playgroud)

但是,该代码在使用时不起作用join.有没有办法使用JPA Criteria API计算查询结果集的行数?

更新:这是创建CriteriaQuery的代码:

    CriteriaQuery<T> queryDefinition = criteriaBuilder.createQuery(this.entityClass);
    Root<T> root = queryDefinition.from(this.entityClass);
Run Code Online (Sandbox Code Playgroud)

并且可以将一些联接添加到根,直到执行查询为止:

public Predicate addPredicate(Root<T> root) {
                Predicate predicate = getEntityManager().getCriteriaBuilder().ge(root.join(Entity_.someList).get("id"), 13);
                return predicate;
}
Run Code Online (Sandbox Code Playgroud)

并且生成的异常如下:

org.hibernate.hql.ast.QuerySyntaxException:无效路径:'generatedAlias1.id'[从entity.Entity中选择count(generatedAlias0)为generatedAlias0,其中(generatedAlias0.id> = 13L)和((generatedAlias1.id <= 34L)) ]

其中generatedAlias1应该在Entity上,generatedAlias0应该在我加入的关联上.请注意,我正确实现了Join,因为当我执行不带计数查询的查询时,它执行时没有错误,并且Join正常工作但是当我尝试执行count查询时它会抛出异常.

java orm pagination jpa count

7
推荐指数
2
解决办法
1万
查看次数

波斯语音译Java API

我需要音译English,Persian并希望在离线模式下使用它.有没有可以离线使用的免费API?

java api persian transliteration

6
推荐指数
1
解决办法
1286
查看次数

标签 统计

java ×2

api ×1

count ×1

jpa ×1

orm ×1

pagination ×1

persian ×1

transliteration ×1