java - Casting in JPQL when using NEW -


i'm using eclipselink, , have following jpql query:

select new javax.faces.model.selectitem((java.lang.object) s.id, s.description) status s s.active = true 

the cast before s.id needed because constructor of selectitem expects object , string, status.id long.

however, when executing query following exception:

caused by: exception [eclipselink-8024] (eclipse persistence services - 2.0.1.v20100213-r6600): org.eclipse.persistence.exceptions.jpqlexception exception description: syntax error parsing query [select new javax.faces.model.selectitem((java.lang.object) s.id, s.description) status s.active = true], line 1, column 59: syntax error @ [s]. internal exception: mismatchedtokenexception(78!=82)     @ org.eclipse.persistence.exceptions.jpqlexception.syntaxerrorat(jpqlexception.java:362)     @ org.eclipse.persistence.internal.jpa.parsing.jpql.jpqlparser.handlerecognitionexception(jpqlparser.java:304)     @ org.eclipse.persistence.internal.jpa.parsing.jpql.jpqlparser.adderror(jpqlparser.java:245)     @ org.eclipse.persistence.internal.jpa.parsing.jpql.jpqlparser.reporterror(jpqlparser.java:362)     @ org.eclipse.persistence.internal.libraries.antlr.runtime.baserecognizer.recoverfrommismatchedelement(unknown source)     @ org.eclipse.persistence.internal.libraries.antlr.runtime.baserecognizer.recoverfrommismatchedtoken(unknown source)     @ org.eclipse.persistence.internal.libraries.antlr.runtime.baserecognizer.mismatch(unknown source)     @ org.eclipse.persistence.internal.libraries.antlr.runtime.baserecognizer.match(unknown source)     @ org.eclipse.persistence.internal.jpa.parsing.jpql.antlr.jpqlparser.constructorexpression(jpqlparser.java:2635)     @ org.eclipse.persistence.internal.jpa.parsing.jpql.antlr.jpqlparser.selectexpression(jpqlparser.java:2045)     @ org.eclipse.persistence.internal.jpa.parsing.jpql.antlr.jpqlparser.selectitem(jpqlparser.java:1351)     @ org.eclipse.persistence.internal.jpa.parsing.jpql.antlr.jpqlparser.selectclause(jpqlparser.java:1266)     @ org.eclipse.persistence.internal.jpa.parsing.jpql.antlr.jpqlparser.selectstatement(jpqlparser.java:352)     @ org.eclipse.persistence.internal.jpa.parsing.jpql.antlr.jpqlparser.document(jpqlparser.java:276)     @ org.eclipse.persistence.internal.jpa.parsing.jpql.jpqlparser.parse(jpqlparser.java:133)     @ org.eclipse.persistence.internal.jpa.parsing.jpql.jpqlparser.buildparsetree(jpqlparser.java:94)     @ org.eclipse.persistence.internal.jpa.ejbqueryimpl.buildejbqldatabasequery(ejbqueryimpl.java:198)     @ org.eclipse.persistence.internal.jpa.ejbqueryimpl.buildejbqldatabasequery(ejbqueryimpl.java:173)     @ org.eclipse.persistence.internal.jpa.ejbqueryimpl.<init>(ejbqueryimpl.java:125)     @ org.eclipse.persistence.internal.jpa.ejbqueryimpl.<init>(ejbqueryimpl.java:109)     @ org.eclipse.persistence.internal.jpa.entitymanagerimpl.createquery(entitymanagerimpl.java:1326)     ... 51 more caused by: mismatchedtokenexception(78!=82)     ... 66 more 

how can cast s.id java.lang.object without getting exception?

i don't think possible.

by way it's kind of bad practice mix gui layer (selectitem class) , persistence layer (jpa). create separate statusdto class proper constructor (long, string) , manually map selectitem.

in way have db layer changes independent on gui changes. instance if column in database change type, not affect gui layer, since can take care of in 1 place - dto class. otherwise have go through places have dependency between selectitem, etc. , db queries.


Comments

Popular posts from this blog

c# - Operator '==' incompatible with operand types 'Guid' and 'Guid' using DynamicExpression.ParseLambda<T, bool> -