MapJoin#entry() does not seem to work . , when Criteria API is used:
Example: 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(); ends up in : 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)
Whereas JPQL working fine: EntityManager em = emf.createEntityManager(); TypedQuery<Map.Entry> query = em.createQuery("SELECT ENTRY(c.orderMap) FROM Customer c", Map.Entry.class); List<Map.Entry> resultList = query.getResultList();
Assert.assertTrue(resultList.size()==1); Assert.assertEquals("online", resultList.get(0).getKey()); ------------- attached is unit Unit test is attached . Thanks |
|