error running JPQL in service #208

Hi
I am getting the following errors:


QueryErrorsFoundException: Errors found
CommonErrorNode[<unexpected: [@13,53:53='.',<60>,1:53], resync=w.productionStage.id =>]
CommonErrorNode[<unexpected: [@23,83:83='.',<60>,1:83], resync=w.article.id =>]

Error detail:


com.haulmont.cuba.core.global.RemoteException:
---
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'cuba_QueryParser' defined in URL [jar:file:/Users/Mortoza/studio-projects/inteaccgms/build/tomcat/webapps/app-core/WEB-INF/lib/cuba-global-6.0.9.jar!/com/haulmont/cuba/core/global/QueryParserAstBased.class]: Bean instantiation via constructor failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.haulmont.cuba.core.global.QueryParserAstBased]: Constructor threw exception; nested exception is com.haulmont.cuba.core.sys.jpql.QueryErrorsFoundException: Errors found
CommonErrorNode[<unexpected: [@13,53:53='.',<60>,1:53], resync=w.productionStage.id =>]
CommonErrorNode[<unexpected: [@23,83:83='.',<60>,1:83], resync=w.article.id =>]
---
org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.haulmont.cuba.core.global.QueryParserAstBased]: Constructor threw exception; nested exception is com.haulmont.cuba.core.sys.jpql.QueryErrorsFoundException: Errors found
CommonErrorNode[<unexpected: [@13,53:53='.',<60>,1:53], resync=w.productionStage.id =>]
CommonErrorNode[<unexpected: [@23,83:83='.',<60>,1:83], resync=w.article.id =>]
---
com.haulmont.cuba.core.sys.jpql.QueryErrorsFoundException: Errors found
CommonErrorNode[<unexpected: [@13,53:53='.',<60>,1:53], resync=w.productionStage.id =>]
CommonErrorNode[<unexpected: [@23,83:83='.',<60>,1:83], resync=w.article.id =>]
    at com.haulmont.cuba.core.sys.ServiceInterceptor.aroundInvoke(ServiceInterceptor.java:73)
    at sun.reflect.GeneratedMethodAccessor83.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:621)
    at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:610)
    at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:68)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:168)
    at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207)
    at com.sun.proxy.$Proxy166.createOrInsertWageRate(Unknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at com.haulmont.cuba.core.sys.remoting.LocalServiceInvokerImpl.invoke(LocalServiceInvokerImpl.java:77)
    at com.haulmont.cuba.web.sys.remoting.LocalServiceProxy$LocalServiceInvocationHandler.invoke(LocalServiceProxy.java:123)
    at com.sun.proxy.$Proxy50.createOrInsertWageRate(Unknown Source)
    at com.inteacc.gms.gui.productionwagerate.ProductionWageRateBrowse.init(ProductionWageRateBrowse.java:89)
    at com.haulmont.cuba.gui.WindowManager.init(WindowManager.java:731)
    at com.haulmont.cuba.gui.WindowManager.initWrapperFrame(WindowManager.java:722)
    at com.haulmont.cuba.gui.WindowManager.createWindow(WindowManager.java:176)
    at com.haulmont.cuba.gui.WindowManager.openWindow(WindowManager.java:345)
    at com.haulmont.cuba.gui.config.MenuCommand.execute(MenuCommand.java:87)
    at com.haulmont.cuba.web.sys.MenuBuilder$1.menuSelected(MenuBuilder.java:153)
    at com.vaadin.ui.MenuBar.changeVariables(MenuBar.java:207)
    at com.vaadin.server.communication.ServerRpcHandler.changeVariables(ServerRpcHandler.java:508)
    at com.vaadin.server.communication.ServerRpcHandler.handleInvocations(ServerRpcHandler.java:327)
    at com.vaadin.server.communication.ServerRpcHandler.handleRpc(ServerRpcHandler.java:202)
    at com.vaadin.server.communication.UidlRequestHandler.synchronizedHandleRequest(UidlRequestHandler.java:95)
    at com.haulmont.cuba.web.sys.CubaVaadinServletService$CubaUidlRequestHandler.lambda$synchronizedHandleRequest$67(CubaVaadinServletService.java:290)
    at com.haulmont.cuba.web.sys.CubaVaadinServletService$CubaUidlRequestHandler$$Lambda$17/760298785.call(Unknown Source)
    at com.haulmont.cuba.web.sys.CubaVaadinServletService.withUserSession(CubaVaadinServletService.java:171)
    at com.haulmont.cuba.web.sys.CubaVaadinServletService$CubaUidlRequestHandler.synchronizedHandleRequest(CubaVaadinServletService.java:290)
    at com.vaadin.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:41)
    at com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1408)
    at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:356)
    at com.haulmont.cuba.web.sys.CubaApplicationServlet.serviceAppRequest(CubaApplicationServlet.java:226)
    at com.haulmont.cuba.web.sys.CubaApplicationServlet.service(CubaApplicationServlet.java:149)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at com.haulmont.cuba.web.sys.CubaHttpFilter.handleNotFiltered(CubaHttpFilter.java:100)
    at com.haulmont.cuba.web.sys.CubaHttpFilter.doFilter(CubaHttpFilter.java:87)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1091)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:673)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1526)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1482)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:745)

Bean contents


@Service(ProductionService.NAME)
public class ProductionServiceBean implements ProductionService {

    @Inject
    private Persistence persistence;

    @Inject
    private Metadata metadata;


    @Override
    public void createOrInsertWageRate() {
        try (Transaction tx = persistence.createTransaction()) {
            // Search for existing customers with the given name
            TypedQuery<FactoryProductionStage> query = persistence.getEntityManager().createQuery(
                    "select c from inteaccgms$FactoryProductionStage c", FactoryProductionStage.class);
            //query.setParameter("name", name);

            List<FactoryProductionStage> stages = query.getResultList();

            for (FactoryProductionStage stage : stages) {
                TypedQuery<Article> queryArticle = persistence.getEntityManager().createQuery(
                        "select a from inteaccgms$Article a", Article.class);

                List<Article> articles = queryArticle.getResultList();
                for (Article article : articles) {
                    // Search for existing ProductionWageRate with the given Article and Production Stage
                    TypedQuery<ProductionWageRate> queryWage = persistence.getEntityManager().createQuery(
                            "select w from inteaccgms$ProductionWageRate w where w.productionStage.id = :?1" +
                                    "and w.article.id = :?2", ProductionWageRate.class);
                    queryWage.setParameter(1, stage.getId());
                    queryWage.setParameter(2, article.getId());

                    List<ProductionWageRate> rates = queryWage.getResultList();
                    if (rates.size() == 0) {
                        ProductionWageRate productionWageRate = metadata.create(ProductionWageRate.class);
                        productionWageRate.setFactoryProductionStage(stage);
                        productionWageRate.setArticle(article);
                        productionWageRate.setPieceRate(new BigDecimal(0));
                        persistence.getEntityManager().persist(productionWageRate);
                    }
                }
            }

            tx.commit();
        }

    }

}

Controller file content:


public class ProductionWageRateBrowse extends AbstractLookup {
//.......

    @Override
    public void init(Map<String, Object> params) {
       // .............

   
        productionService.createOrInsertWageRate();

    }

In your query, mark parameters either as positional ?1, ?2, or as named :name1, :name2.
So in your case it should be

w.productionStage.id = ?1 and w.article.id = ?2

Note that on the client tier (datasources and DataManager) only named parameters are supported. On the middleware (your service for example - both).

Thank you Konstantin for nice explanation.

I tried the first option that you have indicated and now getting the following error message:


com.haulmont.cuba.core.global.RemoteException:
---
java.lang.IllegalArgumentException: An exception occurred while creating a query in EntityManager: 
Exception Description: Problem compiling [select w from inteaccgms$ProductionWageRate w where w.productionStage.id = ?1  and w.article.id = ?2]. 
[52, 72] The state field path 'w.productionStage.id' cannot be resolved to a valid type.
---
org.eclipse.persistence.exceptions.JPQLException: 
Exception Description: Problem compiling [select w from inteaccgms$ProductionWageRate w where w.productionStage.id = ?1  and w.article.id = ?2]. 
[52, 72] The state field path 'w.productionStage.id' cannot be resolved to a valid type.
    at com.haulmont.cuba.core.sys.ServiceInterceptor.aroundInvoke(ServiceInterceptor.java:73)
    at sun.reflect.GeneratedMethodAccessor84.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:621)
    at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:610)
    at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:68)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:168)
    at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207)
    at com.sun.proxy.$Proxy166.createOrInsertWageRate(Unknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at com.haulmont.cuba.core.sys.remoting.LocalServiceInvokerImpl.invoke(LocalServiceInvokerImpl.java:77)
    at com.haulmont.cuba.web.sys.remoting.LocalServiceProxy$LocalServiceInvocationHandler.invoke(LocalServiceProxy.java:123)
    at com.sun.proxy.$Proxy50.createOrInsertWageRate(Unknown Source)
    at com.inteacc.gms.gui.productionwagerate.ProductionWageRateBrowse.init(ProductionWageRateBrowse.java:89)
    at com.haulmont.cuba.gui.WindowManager.init(WindowManager.java:731)
    at com.haulmont.cuba.gui.WindowManager.initWrapperFrame(WindowManager.java:722)
    at com.haulmont.cuba.gui.WindowManager.createWindow(WindowManager.java:176)
    at com.haulmont.cuba.gui.WindowManager.openWindow(WindowManager.java:345)
    at com.haulmont.cuba.gui.config.MenuCommand.execute(MenuCommand.java:87)
    at com.haulmont.cuba.web.sys.MenuBuilder$1.menuSelected(MenuBuilder.java:153)
    at com.vaadin.ui.MenuBar.changeVariables(MenuBar.java:207)
    at com.vaadin.server.communication.ServerRpcHandler.changeVariables(ServerRpcHandler.java:508)
    at com.vaadin.server.communication.ServerRpcHandler.handleInvocations(ServerRpcHandler.java:327)
    at com.vaadin.server.communication.ServerRpcHandler.handleRpc(ServerRpcHandler.java:202)
    at com.vaadin.server.communication.UidlRequestHandler.synchronizedHandleRequest(UidlRequestHandler.java:95)
    at com.haulmont.cuba.web.sys.CubaVaadinServletService$CubaUidlRequestHandler.lambda$synchronizedHandleRequest$67(CubaVaadinServletService.java:290)
    at com.haulmont.cuba.web.sys.CubaVaadinServletService$CubaUidlRequestHandler$$Lambda$17/1757307975.call(Unknown Source)
    at com.haulmont.cuba.web.sys.CubaVaadinServletService.withUserSession(CubaVaadinServletService.java:171)
    at com.haulmont.cuba.web.sys.CubaVaadinServletService$CubaUidlRequestHandler.synchronizedHandleRequest(CubaVaadinServletService.java:290)
    at com.vaadin.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:41)
    at com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1408)
    at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:356)
    at com.haulmont.cuba.web.sys.CubaApplicationServlet.serviceAppRequest(CubaApplicationServlet.java:226)
    at com.haulmont.cuba.web.sys.CubaApplicationServlet.service(CubaApplicationServlet.java:149)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at com.haulmont.cuba.web.sys.CubaHttpFilter.handleNotFiltered(CubaHttpFilter.java:100)
    at com.haulmont.cuba.web.sys.CubaHttpFilter.doFilter(CubaHttpFilter.java:87)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1091)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:673)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1526)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1482)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:745)

My code looks like:



    @Override
    public void createOrInsertWageRate() {
        try (Transaction tx = persistence.createTransaction()) {
            // Search for existing customers with the given name
            TypedQuery<FactoryProductionStage> query = persistence.getEntityManager().createQuery(
                    "select c from inteaccgms$FactoryProductionStage c", FactoryProductionStage.class);
            //query.setParameter("name", name);

            List<FactoryProductionStage> stages = query.getResultList();

            for (FactoryProductionStage stage : stages) {
                TypedQuery<Article> queryArticle = persistence.getEntityManager().createQuery(
                        "select a from inteaccgms$Article a", Article.class);

                List<Article> articles = queryArticle.getResultList();
                for (Article article : articles) {
                    // Search for existing ProductionWageRate with the given Article and Production Stage
                    TypedQuery<ProductionWageRate> queryWage = persistence.getEntityManager().createQuery(
                            "select w from inteaccgms$ProductionWageRate w where w.productionStage.id = ?1 " +
                                    " and w.article.id = ?2", ProductionWageRate.class);
                    queryWage.setParameter(1, stage);
                    queryWage.setParameter(2, article);

                    List<ProductionWageRate> rates = queryWage.getResultList();
                    if (rates.size() == 0) {
                        ProductionWageRate productionWageRate = metadata.create(ProductionWageRate.class);
                        productionWageRate.setFactoryProductionStage(stage);
                        productionWageRate.setArticle(article);
                        productionWageRate.setPieceRate(new BigDecimal(0));
                        persistence.getEntityManager().persist(productionWageRate);
                    }
                }
            }

            tx.commit();
        }

    }

I also tried passing of parameters


 queryWage.setParameter(1, stage.getId());
                    queryWage.setParameter(2, article.getId());

and getting the same error


JPQLException: 
Exception Description: Problem compiling [select w from inteaccgms$ProductionWageRate w where w.productionStage.id = ?1  and w.article.id = ?2]. 
[52, 72] The state field path 'w.productionStage.id' cannot be resolved to a valid type.

What type the productionStage attribute is? Could you post a piece of ProductionWageRate entity source with this attribute declaration?

Hi
I found the problem and fixed. It works now. Thank you for your help.