Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [eclipselink-users] [JPA Criteria Api] CriteriaBuilder sum on two different root fields

Seems to be a bug, please log a bug for this and vote for it.

As a workaround you may be able to use JPQL, an Expression query, or native
SQL query.



MarcNuri wrote:
> 
> Hello
> I've found a problem today while trying to add two fields from different
> Roots.
> ...
> CriteriaQuery cq = ...;
> Root<Entity1> from1 = cq.from(Entity1.class)
> Root<Entity2> from2 = cq.from(Entity2.class)
> Expression x = cq.sum(from1.get(Entity1_.attr11),
> from1.get(Entity1_.attr12));
> x = cq.sum(x, from2.get(Entity2_.attr21);
> cq.multiselect(from1, from2, x);
> ...
> When running the query I get the following stacktrace which doesn't happen
> if I only put in the sum expression attributes from just one entity.
> 
> Exception Description: Invalid query key [attr21] in expression.
> Query: ReportQuery(referenceClass=PaduaExpedicion )
>         at
> org.eclipse.persistence.exceptions.QueryException.invalidQueryKeyInExpression(QueryException.java:657)
>         at
> org.eclipse.persistence.internal.expressions.QueryKeyExpression.validateNode(QueryKeyExpression.java:847)
>         at
> org.eclipse.persistence.expressions.Expression.normalize(Expression.java:2962)
>         at
> org.eclipse.persistence.internal.expressions.DataExpression.normalize(DataExpression.java:342)
>         at
> org.eclipse.persistence.internal.expressions.QueryKeyExpression.normalize(QueryKeyExpression.java:612)
>         at
> org.eclipse.persistence.internal.expressions.QueryKeyExpression.normalize(QueryKeyExpression.java:599)
>         at
> org.eclipse.persistence.internal.expressions.FunctionExpression.normalize(FunctionExpression.java:385)
>         at
> org.eclipse.persistence.internal.expressions.FunctionExpression.normalize(FunctionExpression.java:385)
>         at
> org.eclipse.persistence.internal.expressions.FunctionExpression.normalize(FunctionExpression.java:385)
>         at
> org.eclipse.persistence.internal.expressions.FunctionExpression.normalize(FunctionExpression.java:385)
>         at
> org.eclipse.persistence.internal.expressions.FunctionExpression.normalize(FunctionExpression.java:385)
>         at
> org.eclipse.persistence.internal.expressions.FunctionExpression.normalize(FunctionExpression.java:385)
>         at
> org.eclipse.persistence.internal.expressions.SQLSelectStatement.normalize(SQLSelectStatement.java:1311)
>         at
> org.eclipse.persistence.internal.queries.ExpressionQueryMechanism.buildReportQuerySelectStatement(ExpressionQueryMechanism.java:560)
>         at
> org.eclipse.persistence.internal.queries.ExpressionQueryMechanism.buildReportQuerySelectStatement(ExpressionQueryMechanism.java:506)
>         at
> org.eclipse.persistence.internal.queries.ExpressionQueryMechanism.prepareReportQuerySelectAllRows(ExpressionQueryMechanism.java:1542)
>         at
> org.eclipse.persistence.queries.ReportQuery.prepareSelectAllRows(ReportQuery.java:1298)
>         at
> org.eclipse.persistence.queries.ReadAllQuery.prepare(ReadAllQuery.java:628)
>         at
> org.eclipse.persistence.queries.ReportQuery.prepare(ReportQuery.java:1047)
>         at
> org.eclipse.persistence.queries.DatabaseQuery.checkPrepare(DatabaseQuery.java:577)
>         at
> org.eclipse.persistence.queries.ObjectLevelReadQuery.checkPrepare(ObjectLevelReadQuery.java:824)
>         at
> org.eclipse.persistence.queries.DatabaseQuery.checkPrepare(DatabaseQuery.java:537)
>         at
> org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:778)
>         at
> org.eclipse.persistence.queries.ObjectLevelReadQuery.execute(ObjectLevelReadQuery.java:1040)
>         at
> org.eclipse.persistence.queries.ReadAllQuery.execute(ReadAllQuery.java:383)
>         at
> org.eclipse.persistence.queries.ObjectLevelReadQuery.executeInUnitOfWork(ObjectLevelReadQuery.java:1126)
>         at
> org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2842)
>         at
> org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1521)
>         at
> org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1503)
>         at
> org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1477)
>         at
> org.eclipse.persistence.internal.jpa.EJBQueryImpl.executeReadQuery(EJBQueryImpl.java:484)
>         at
> org.eclipse.persistence.internal.jpa.EJBQueryImpl.getResultList(EJBQueryImpl.java:741)
> 
> --
> Marc Nuri
> 


-----
http://wiki.eclipse.org/User:James.sutherland.oracle.com James Sutherland 
http://www.eclipse.org/eclipselink/
 EclipseLink ,  http://www.oracle.com/technology/products/ias/toplink/
TopLink 
Wiki:  http://wiki.eclipse.org/EclipseLink EclipseLink , 
http://wiki.oracle.com/page/TopLink TopLink 
Forums:  http://forums.oracle.com/forums/forum.jspa?forumID=48 TopLink , 
http://www.nabble.com/EclipseLink-f26430.html EclipseLink 
Book:  http://en.wikibooks.org/wiki/Java_Persistence Java Persistence 
Blog:  http://java-persistence-performance.blogspot.com/ Java Persistence
Performance 
-- 
View this message in context: http://old.nabble.com/-JPA-Criteria-Api--CriteriaBuilder-sum-on-two-different-root-fields-tp31163028p31229377.html
Sent from the EclipseLink - Users mailing list archive at Nabble.com.



Back to the top