java - build a org.eclipse.persistence.queries.ReportQuery from a javax.persistence.Query -
i trying use single named query both obtaining set of results , count available amount of data. have named jpql query:
@namedquery(name = "query.all.absences.by.name", query = "select absence a.name = :name")
when obtain absences i'm invoking query this:
final query q = em.createnamedquery("query.all.absences.by.name"); q.setparameter("name","arandomabsencename"); //maxresults , firstresult coming parameters, computed in method q.setmaxresults(maxresults); q.setfirstresult(firstresult);
q.getresultlist()
gets me correct result set. far good.
now want use same named query execute count query. i'm doing following:
final query q = em.createnamedquery("query.all.absences.by.name"); q.setparameter("name","arandomabsencename"); q.sethint(queryhints.query_type, "org.eclipse.persistence.queries.reportquery"); final reportquery test = jpahelper.getreportquery(q); test.addcount(); test.setshouldreturnwithoutreportqueryresult(true);
this approach works fine if named query not have parameters. parameters, if execute reportquery defined above have following exception:
exception [eclipselink-6094] (eclipse persistence services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.queryexception exception description: parameter name [name] in query's selection criteria not match parameter name defined in query. query: reportquery(referenceclass=absencecategory sql="select count(category_key) absence_category (category_key = ?)") @ org.eclipse.persistence.exceptions.queryexception.parameternamemismatch(queryexception.java:1063) @ org.eclipse.persistence.internal.expressions.parameterexpression.getvalue(parameterexpression.java:275) @ org.eclipse.persistence.internal.databaseaccess.databasecall.translate(databasecall.java:1000) @ org.eclipse.persistence.internal.queries.datasourcecallquerymechanism.executecall(datasourcecallquerymechanism.java:206) @ org.eclipse.persistence.internal.queries.datasourcecallquerymechanism.executecall(datasourcecallquerymechanism.java:193) @ org.eclipse.persistence.internal.queries.datasourcecallquerymechanism.executeselectcall(datasourcecallquerymechanism.java:264) @ org.eclipse.persistence.internal.queries.datasourcecallquerymechanism.selectallrows(datasourcecallquerymechanism.java:646) @ org.eclipse.persistence.internal.queries.expressionquerymechanism.selectallrowsfromtable(expressionquerymechanism.java:2611) @ org.eclipse.persistence.internal.queries.expressionquerymechanism.selectallreportqueryrows(expressionquerymechanism.java:2554) @ org.eclipse.persistence.queries.reportquery.executedatabasequery(reportquery.java:846) @ org.eclipse.persistence.queries.databasequery.execute(databasequery.java:844) @ org.eclipse.persistence.queries.objectlevelreadquery.execute(objectlevelreadquery.java:1040) @ org.eclipse.persistence.queries.readallquery.execute(readallquery.java:392) @ org.eclipse.persistence.queries.objectlevelreadquery.executeinunitofwork(objectlevelreadquery.java:1128) @ org.eclipse.persistence.internal.sessions.unitofworkimpl.internalexecutequery(unitofworkimpl.java:2871) @ org.eclipse.persistence.internal.sessions.abstractsession.executequery(abstractsession.java:1516) @ org.eclipse.persistence.internal.sessions.abstractsession.executequery(abstractsession.java:1498) @ org.eclipse.persistence.internal.sessions.abstractsession.executequery(abstractsession.java:1449)
how else can possibly set parameters reportquery?
i'm using eclipselink 2.0.
how executing reportquery? need call session.executequery(query, arguments) , pass list of arguments (order same query.getarguments().
you can use jpaentitymanager createquery(databasequery) api convert reportquery jpa query, can set parameter jpa way.
Comments
Post a Comment