首页 > 解决方案 > 标准 api - 非法状态异常

问题描述

我使用 Criteria Api 编写了以下代码:

CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();

CriteriaQuery<Entity> criteriaQuery = criteriaBuilder.createQuery(Entity.class);
Root<Entity> root = criteriaQuery.from(Entity.class);
criteriaQuery.select(root);

CriteriaQuery<Long> countQuery = criteriaBuilder.createQuery(Long.class);
countQuery.select(criteriaBuilder.count(root));

Long countOfRows = entityManager.createQuery(countQuery).getSingleResult();

结果我得到一个例外:

java.lang.IllegalStateException:未指定条件查询根

异常由getSingleResult方法(代码的最后一行)引发。谢谢你的帮助!

标签: javahibernatecriteria-api

解决方案


它在强制countQuery添加根后起作用:

((QueryStructure)((CriteriaQueryImpl)countQuery).queryStructure).roots.add(root)

推荐阅读