Dave
Dave

Reputation: 769

JPA EclipseLink support subquery in selection? ClassCastException

using Eclipse 2.6.3, selecting a subquery emits the following error. Does it support subquery in selection?

CriteriaQuery query = criteriaBuilder.createQuery(String.class);
Root root = query.from(Employee.class);
Subquery subquery = query.subquery(String.class);
Root subqueryRoot = subquery.collate(root);
subquery.select(subqueryRoot.get("name"));
query.select(subquery);

java.lang.ClassCastException: org.eclipse.persistence.internal.jpa.querydef.SubQueryImpl cannot be cast to org.eclipse.persistence.internal.jpa.querydef.SelectionImpl
        at org.eclipse.persistence.internal.jpa.querydef.CriteriaQueryImpl.createCompoundQuery(CriteriaQueryImpl.java:511)
        at org.eclipse.persistence.internal.jpa.querydef.CriteriaQueryImpl.getDatabaseQuery(CriteriaQueryImpl.java:447)
        at org.eclipse.persistence.internal.jpa.querydef.CommonAbstractCriteriaImpl.translate(CommonAbstractCriteriaImpl.java:198)
        at org.eclipse.persistence.internal.jpa.querydef.CriteriaQueryImpl.translate(CriteriaQueryImpl.java:691)
        at org.eclipse.persistence.internal.jpa.EntityManagerImpl.createQuery(EntityManagerImpl.java:1551)

Upvotes: 2

Views: 1247

Answers (1)

Chris
Chris

Reputation: 21190

You cannot select a subquery directly, as subquery usage is restricted to single results, and so you would have to use it within a function. According to EclipseLink docs, EclipseLink has JPQL support for using the subquery in the FROM clause, so you might try using it similarly with Criteria API, though I do not know if it will work.

Upvotes: 1

Related Questions