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
Post a Comment