Search code examples
javahibernatecriteria-api

Criteria api - illegalStateException


I've written following code by using 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();

As a result I get an exception:

java.lang.IllegalStateException: No criteria query roots were specified

The exception is thrown by getSingleResult method (last line of the code). Thank you for help!


Solution

  • It works after forcing countQuery to add root:

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