MapJoin#entry() does not seem to work, when Criteria API is used:
Example: {code} EntityManager entityManager = emf.createEntityManager(); CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder(); CriteriaQuery<Map.Entry> query = criteriaBuilder.createQuery(Map.Entry.class); Root<Customer> customer = query.from(Customer.class); MapJoin<Customer, String, Order> orderMap = customer.join(Customer_.orderMap); query.select(orderMap.entry()); TypedQuery<Map.Entry> typedQuery = entityManager.createQuery(query);//exception thrown here List<Map.Entry> resultList = typedQuery.getResultList(); ------------- {code} ends up in : {code} java.lang.ClassCastException: org.hibernate.metamodel.internal.PluralAttributeImpl$MapAttributeImpl cannot be cast to org.hibernate.query.criteria.internal.Renderable
at org.hibernate.query.criteria.internal.expression.MapEntryExpression.path(MapEntryExpression.java:62) at org.hibernate.query.criteria.internal.expression.MapEntryExpression.renderProjection(MapEntryExpression.java:56) -------------------- {code} Whereas JPQL is working fine: ------------------- {code} EntityManager em = emf.createEntityManager(); TypedQuery<Map.Entry> query = em.createQuery("SELECT ENTRY(mp) FROM Customer c JOIN c.orderMap mp", Map.Entry.class); List<Map.Entry> resultList = query.getResultList();
Assert.assertTrue(resultList.size()==1); Assert.assertEquals("online", resultList.get(0).getKey()); ------------- {code} Unit test is attached. Thanks |
|