When selecting a treated root using the JPA criteria API, Hibernate fails to generate an alias for the TreatedRoot while rendering the HQL, causing a syntax error.
The following testcase:
@Test
public void treatRoot() {
EntityManager em = getOrCreateEntityManager();
CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<Human> criteria = builder.createQuery( Human.class );
Root<Animal> root = criteria.from( Animal.class );
criteria.select( builder.treat( root, Human.class ) );
em.createQuery( criteria ).getResultList();
em.close();
}
Generates this HQL:
select treat(null as org.hibernate.jpa.test.criteria.Human) from org.hibernate.jpa.test.criteria.Animal as generatedAlias0
Changing TreatedRoot.render to the following fixes the issue.
public String render(RenderingContext renderingContext) {
original.prepareAlias(renderingContext);
return getTreatFragment();
}
I've prepared a pull-request with a testcase and the fix.
|