NullPointerException in {{LiteralExpression#renderProjection}}. {{ValueHandlerFactory.determineAppropriateHandler( literal.getClass() );}} returns null for enum classes. Triggered when constructing a new result object using a selectCase criteria.
Test Case https://github.com/gilday/HHH-12184
{code:java} @Test public void hhh123Test() { EntityManager em = entityManagerFactory.createEntityManager(); em.getTransaction().begin();
// insert a few MyEntity instances em.persist(new MyEntity()); em.persist(new MyEntity()); em.flush();
// query for Foo results using construct and selectCase final CriteriaBuilder cb = em.getCriteriaBuilder(); final CriteriaQuery<Foo> query = cb.createQuery(Foo.class); final Root<MyEntity> root = query.from(MyEntity.class);
query .select(cb.construct(Foo.class, cb.selectCase() .when(cb.equal(root.get("id"), 1), Foo.State.FIRST) .otherwise(Foo.State.NOT_FIRST), root.get(org.hibernate.bugs.MyEntity_.id) )) .orderBy(cb.asc(root.get(org.hibernate.bugs.MyEntity_.id)));
final List<Foo> foos = em.createQuery(query).getResultList(); assertThat(foos.size(), equalTo(2)); assertThat(foos.get(0).state(), equalTo(Foo.State.FIRST)); assertThat(foos.get(1).state(), equalTo(Foo.State.NOT_FIRST));
em.getTransaction().commit(); em.close(); }
@Accessors(fluent = true) @Getter @RequiredArgsConstructor public static class Foo { enum State {FIRST, NOT_FIRST}
private final State state; private final int id; } {code} |
|