mysql - Constructor queries on a non-persistent entity unexpectedly fail to supply a Boolean parameter as a constructor argument -


there 2 tables in mysql database

  • user_table
  • feedback

the relationship between them intuitive - 1 many user_table feedback.


i need fetch list of selected columns these tables are

  • from feedback
    • feedbackid (java.lang.long)
    • feedbacktitle (java.lang.string)
    • feedbackdescription (string, decorated @lob)
    • feedbackdate (org.joda.time.datetime)
    • testimonial (java.lang.boolean)
  • from user_table
    • userid (java.lang.long)
    • firstname (java.lang.string)

these many fields out of many others required executing query.

the criteria query follows.

criteriabuilder criteriabuilder=entitymanager.getcriteriabuilder(); criteriaquery<feedbackutils>criteriaquery = criteriabuilder.createquery(feedbackutils.class); metamodel metamodel = entitymanager.getmetamodel(); entitytype<feedback> entitytype = metamodel.entity(feedback.class); root<feedback> root = criteriaquery.from(entitytype);  list<selection<?>>selections=new arraylist<selection<?>>(); selections.add(root.get(feedback_.feedbackid)); selections.add(root.get(feedback_.feedbacktitle)); selections.add(root.get(feedback_.feedbackdescription)); selections.add(root.get(feedback_.feedbackdate)); selections.add(root.get(feedback_.testimonial));  join<feedback, usertable> join = root.join(feedback_.userid, jointype.inner); selections.add(join.get(usertable_.userid)); selections.add(join.get(usertable_.firstname));  criteriaquery.select(criteriabuilder.construct(feedbackutils.class, selections.toarray(new selection[0]))); criteriaquery.orderby(criteriabuilder.desc(root.get(feedback_.feedbackid)));  list<feedbackutils>list = entitymanager.createquery(criteriaquery).setfirstresult(first).setmaxresults(pagesize).getresultlist(); 

the feedbackutils class follows.

import java.io.serializable; import org.joda.time.datetime;  public final class feedbackutils implements serializable {     private static final long serialversionuid = 1l;     private long feedbackid;     private string feedbacktitle;     private string feedbackdescription;     private datetime feedbackdate;     private boolean testimonial;    //this causes exception     private long userid;     private string firstname;      public feedbackutils(long feedbackid, string feedbacktitle, string feedbackdescription, datetime feedbackdate, boolean testimonial, long userid, string firstname) {         this.feedbackid = feedbackid;         this.feedbacktitle = feedbacktitle;         this.feedbackdescription = feedbackdescription;         this.feedbackdate = feedbackdate;         this.testimonial = testimonial;         this.userid = userid;         this.firstname = firstname;     }      //getters , setters. } 

mapping of testimonial property in feedback entity follows.

@column(name = "testimonial") private boolean testimonial; 

it type of tinyint(1) in mysql.


the above query when attempted causes following exception thrown.

severe:   error rendering view[/admin_side/feedback.xhtml] javax.ejb.ejbexception     @ com.sun.ejb.containers.ejbcontainertransactionmanager.processsystemexception(ejbcontainertransactionmanager.java:748)     @ com.sun.ejb.containers.ejbcontainertransactionmanager.completenewtx(ejbcontainertransactionmanager.java:698)     @ com.sun.ejb.containers.ejbcontainertransactionmanager.postinvoketx(ejbcontainertransactionmanager.java:503)     @ com.sun.ejb.containers.basecontainer.postinvoketx(basecontainer.java:4475)     @ com.sun.ejb.containers.basecontainer.postinvoke(basecontainer.java:2009)     @ com.sun.ejb.containers.basecontainer.postinvoke(basecontainer.java:1979)     @ com.sun.ejb.containers.ejblocalobjectinvocationhandler.invoke(ejblocalobjectinvocationhandler.java:220)     @ com.sun.ejb.containers.ejblocalobjectinvocationhandlerdelegate.invoke(ejblocalobjectinvocationhandlerdelegate.java:88)     @ $proxy662.getlist(unknown source)     @ admin.bean.feedbackmanagedbean.load(feedbackmanagedbean.java:174)     @ org.primefaces.component.datatable.datatable.loadlazydata(datatable.java:815)     @ org.primefaces.component.datatable.datatablerenderer.prerender(datatablerenderer.java:93)     @ org.primefaces.component.datatable.datatablerenderer.encodeend(datatablerenderer.java:81)     @ javax.faces.component.uicomponentbase.encodeend(uicomponentbase.java:919)     @ org.primefaces.renderkit.corerenderer.renderchild(corerenderer.java:85)     @ org.primefaces.renderkit.corerenderer.renderchildren(corerenderer.java:68)     @ org.primefaces.component.panel.panelrenderer.encodecontent(panelrenderer.java:204)     @ org.primefaces.component.panel.panelrenderer.encodemarkup(panelrenderer.java:121)     @ org.primefaces.component.panel.panelrenderer.encodeend(panelrenderer.java:58)     @ javax.faces.component.uicomponentbase.encodeend(uicomponentbase.java:919)     @ javax.faces.component.uicomponent.encodeall(uicomponent.java:1864)     @ javax.faces.render.renderer.encodechildren(renderer.java:176)     @ javax.faces.component.uicomponentbase.encodechildren(uicomponentbase.java:889)     @ org.primefaces.renderkit.corerenderer.renderchild(corerenderer.java:81)     @ org.primefaces.renderkit.corerenderer.renderchildren(corerenderer.java:68)     @ org.primefaces.component.layout.layoutunitrenderer.encodeend(layoutunitrenderer.java:49)     @ javax.faces.component.uicomponentbase.encodeend(uicomponentbase.java:919)     @ javax.faces.component.uicomponent.encodeall(uicomponent.java:1864)     @ javax.faces.component.uicomponent.encodeall(uicomponent.java:1860)     @ javax.faces.component.uicomponent.encodeall(uicomponent.java:1860)     @ javax.faces.component.uicomponent.encodeall(uicomponent.java:1860)     @ com.sun.faces.application.view.faceletviewhandlingstrategy.renderview(faceletviewhandlingstrategy.java:461)     @ com.sun.faces.application.view.multiviewhandler.renderview(multiviewhandler.java:133)     @ javax.faces.application.viewhandlerwrapper.renderview(viewhandlerwrapper.java:337)     @ javax.faces.application.viewhandlerwrapper.renderview(viewhandlerwrapper.java:337)     @ com.sun.faces.lifecycle.renderresponsephase.execute(renderresponsephase.java:120)     @ com.sun.faces.lifecycle.phase.dophase(phase.java:101)     @ com.sun.faces.lifecycle.lifecycleimpl.render(lifecycleimpl.java:219)     @ javax.faces.webapp.facesservlet.service(facesservlet.java:647)     @ org.apache.catalina.core.standardwrapper.service(standardwrapper.java:1682)     @ org.apache.catalina.core.applicationfilterchain.internaldofilter(applicationfilterchain.java:344)     @ org.apache.catalina.core.applicationfilterchain.dofilter(applicationfilterchain.java:214)     @ org.primefaces.webapp.filter.fileuploadfilter.dofilter(fileuploadfilter.java:70)     @ org.apache.catalina.core.applicationfilterchain.internaldofilter(applicationfilterchain.java:256)     @ org.apache.catalina.core.applicationfilterchain.dofilter(applicationfilterchain.java:214)     @ filter.nocachefilter.dofilter(nocachefilter.java:28)     @ org.apache.catalina.core.applicationfilterchain.internaldofilter(applicationfilterchain.java:256)     @ org.apache.catalina.core.applicationfilterchain.dofilter(applicationfilterchain.java:214)     @ org.apache.catalina.core.standardwrappervalve.invoke(standardwrappervalve.java:316)     @ org.apache.catalina.core.standardcontextvalve.invoke(standardcontextvalve.java:160)     @ org.apache.catalina.core.standardpipeline.doinvoke(standardpipeline.java:734)     @ org.apache.catalina.core.standardpipeline.invoke(standardpipeline.java:673)     @ com.sun.enterprise.web.webpipeline.invoke(webpipeline.java:99)     @ org.apache.catalina.core.standardhostvalve.invoke(standardhostvalve.java:174)     @ org.apache.catalina.connector.coyoteadapter.doservice(coyoteadapter.java:357)     @ org.apache.catalina.connector.coyoteadapter.service(coyoteadapter.java:260)     @ com.sun.enterprise.v3.services.impl.containermapper.service(containermapper.java:188)     @ org.glassfish.grizzly.http.server.httphandler.runservice(httphandler.java:191)     @ org.glassfish.grizzly.http.server.httphandler.dohandle(httphandler.java:168)     @ org.glassfish.grizzly.http.server.httpserverfilter.handleread(httpserverfilter.java:189)     @ org.glassfish.grizzly.filterchain.executorresolver$9.execute(executorresolver.java:119)     @ org.glassfish.grizzly.filterchain.defaultfilterchain.executefilter(defaultfilterchain.java:288)     @ org.glassfish.grizzly.filterchain.defaultfilterchain.executechainpart(defaultfilterchain.java:206)     @ org.glassfish.grizzly.filterchain.defaultfilterchain.execute(defaultfilterchain.java:136)     @ org.glassfish.grizzly.filterchain.defaultfilterchain.process(defaultfilterchain.java:114)     @ org.glassfish.grizzly.processorexecutor.execute(processorexecutor.java:77)     @ org.glassfish.grizzly.nio.transport.tcpniotransport.fireioevent(tcpniotransport.java:838)     @ org.glassfish.grizzly.strategies.abstractiostrategy.fireioevent(abstractiostrategy.java:113)     @ org.glassfish.grizzly.strategies.workerthreadiostrategy.run0(workerthreadiostrategy.java:115)     @ org.glassfish.grizzly.strategies.workerthreadiostrategy.access$100(workerthreadiostrategy.java:55)     @ org.glassfish.grizzly.strategies.workerthreadiostrategy$workerthreadrunnable.run(workerthreadiostrategy.java:135)     @ org.glassfish.grizzly.threadpool.abstractthreadpool$worker.dowork(abstractthreadpool.java:564)     @ org.glassfish.grizzly.threadpool.abstractthreadpool$worker.run(abstractthreadpool.java:544)     @ java.lang.thread.run(thread.java:722) caused by: java.lang.illegalargumentexception: exception occured looking on class: class util.feedbackutils constructor using selection criteria types arguments.  if criteriaquery not intended constructor query please verify selection matches return type.     @ org.eclipse.persistence.internal.jpa.querydef.criteriaqueryimpl.populateandsetconstructorselection(criteriaqueryimpl.java:409)     @ org.eclipse.persistence.internal.jpa.querydef.criteriaqueryimpl.select(criteriaqueryimpl.java:93)     @ admin.beans.feedbackbean.getlist(feedbackbean.java:145)     @ sun.reflect.nativemethodaccessorimpl.invoke0(native method)     @ sun.reflect.nativemethodaccessorimpl.invoke(nativemethodaccessorimpl.java:57)     @ sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:43)     @ java.lang.reflect.method.invoke(method.java:601)     @ org.glassfish.ejb.security.application.ejbsecuritymanager.runmethod(ejbsecuritymanager.java:1081)     @ org.glassfish.ejb.security.application.ejbsecuritymanager.invoke(ejbsecuritymanager.java:1153)     @ com.sun.ejb.containers.basecontainer.invokebeanmethod(basecontainer.java:4695)     @ com.sun.ejb.ejbinvocation.invokebeanmethod(ejbinvocation.java:630)     @ com.sun.ejb.containers.interceptors.aroundinvokechainimpl.invokenext(interceptormanager.java:822)     @ com.sun.ejb.ejbinvocation.proceed(ejbinvocation.java:582)     @ org.jboss.weld.ejb.abstractejbrequestscopeactivationinterceptor.aroundinvoke(abstractejbrequestscopeactivationinterceptor.java:46)     @ sun.reflect.generatedmethodaccessor478.invoke(unknown source)     @ sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:43)     @ java.lang.reflect.method.invoke(method.java:601)     @ com.sun.ejb.containers.interceptors.aroundinvokeinterceptor.intercept(interceptormanager.java:883)     @ com.sun.ejb.containers.interceptors.aroundinvokechainimpl.invokenext(interceptormanager.java:822)     @ com.sun.ejb.ejbinvocation.proceed(ejbinvocation.java:582)     @ com.sun.ejb.containers.interceptors.systeminterceptorproxy.docall(systeminterceptorproxy.java:163)     @ com.sun.ejb.containers.interceptors.systeminterceptorproxy.aroundinvoke(systeminterceptorproxy.java:140)     @ sun.reflect.nativemethodaccessorimpl.invoke0(native method)     @ sun.reflect.nativemethodaccessorimpl.invoke(nativemethodaccessorimpl.java:57)     @ sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:43)     @ java.lang.reflect.method.invoke(method.java:601)     @ com.sun.ejb.containers.interceptors.aroundinvokeinterceptor.intercept(interceptormanager.java:883)     @ com.sun.ejb.containers.interceptors.aroundinvokechainimpl.invokenext(interceptormanager.java:822)     @ com.sun.ejb.containers.interceptors.interceptormanager.intercept(interceptormanager.java:369)     @ com.sun.ejb.containers.basecontainer.__intercept(basecontainer.java:4667)     @ com.sun.ejb.containers.basecontainer.intercept(basecontainer.java:4655)     @ com.sun.ejb.containers.ejblocalobjectinvocationhandler.invoke(ejblocalobjectinvocationhandler.java:212)     ... 67 more caused by: java.lang.nosuchmethodexception: util.feedbackutils.<init>(java.lang.long, java.lang.string, java.lang.string, org.joda.time.datetime, java.lang.boolean, java.lang.long, java.lang.string)     @ java.lang.class.getconstructor0(class.java:2721)     @ java.lang.class.getconstructor(class.java:1674)     @ org.eclipse.persistence.internal.security.privilegedaccesshelper.getconstructorfor(privilegedaccesshelper.java:157)     @ org.eclipse.persistence.internal.jpa.querydef.criteriaqueryimpl.populateandsetconstructorselection(criteriaqueryimpl.java:396)     ... 98 more 

this works fine, when type of testimonial changed boolean object in feedbackutils class.

why not let constructor query work, if given boolean type in constructor list of parameters?

i'm using eclipselink 2.5.1.


edit :

in constructor of feedbackutils class, following check,

testimonial.getclass().getname() 

returns java.lang.boolean

and of following,

(testimonial instanceof boolean) testimonial.getclass().equals(boolean.class) testimonial.getclass().isassignablefrom(boolean.class) 

return true.

hence, following type cast valid.

(boolean)testimonial 

upto associated xhtml page, correctly behaves boolean.


Comments

Popular posts from this blog

java - Intellij Synchronizing output directories .. -

git - Initial Commit: "fatal: could not create leading directories of ..." -