I’m migrating an application to Hibernate 6 from 5.6. The code that worked fine prior to 6 and which has stopped working.
public static <T, E> long countByCriteriaBuilder(EntityManager em, Root<T> root, CriteriaQuery<E> criteria) {
final CriteriaBuilder builder = em.getCriteriaBuilder();
final CriteriaQuery<Long> countCriteria = builder.createQuery(Long.class);
countCriteria.select(builder.count(root));
for (Root<?> fromRoot : criteria.getRoots()) {
countCriteria.getRoots().add(fromRoot);
}
final Predicate whereRestriction = criteria.getRestriction();
if (whereRestriction != null) {
countCriteria.where(whereRestriction);
}
final Predicate groupRestriction = criteria.getGroupRestriction();
if (groupRestriction != null) {
countCriteria.having(groupRestriction);
}
countCriteria.groupBy(criteria.getGroupList());
countCriteria.distinct(criteria.isDistinct());
return em.createQuery(countCriteria).getSingleResult();
}
This get follow error in line:
return em.createQuery(countCriteria).getSingleResult();
org.hibernate.query.sqm.InterpretationException: Error interpreting query [SqmRoot not yet resolved to TableGroup]; this may indicate a semantic (user query) problem or a bug in the parser [SqmRoot not yet resolved to TableGroup]