Order By issue using HistoricDetailQuery API

Hi,

I am using Camunda 7.4 and am encountering an exception when processing the following query:

List<HistoricDetail> historicDetails = camunda.history.createHistoricDetailQuery().variableUpdates().taskId( taskId ).orderByTime().asc().list();

Here is an excerpt of the stack trace:

%d [%thread] %-5level %logger - %msg%n org.apache.ibatis.exceptions.PersistenceException:
### Error querying database.  Cause: org.apache.ibatis.builder.BuilderException: Error evaluating expression '         @org.camunda.bpm.engine.impl.db.sql.MybatisJoinHelper@orderBy(orderingProperty, index)'. Cause: org.apache.ibatis.ognl.MethodFailedException: Method "orderBy" failed for object class org.camunda.bpm.engine.impl.db.sql.MybatisJoinHelper [java.lang.NullPointerException]
### Cause: org.apache.ibatis.builder.BuilderException: Error evaluating expression '         @org.camunda.bpm.engine.impl.db.sql.MybatisJoinHelper@orderBy(orderingProperty, index)'. Cause: org.apache.ibatis.ognl.MethodFailedException: Method "orderBy" failed for object class org.camunda.bpm.engine.impl.db.sql.MybatisJoinHelper [java.lang.NullPointerException]
        at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:26) ~[mybatis-3.2.7.jar:3.2.7]
        at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:111) ~[mybatis-3.2.7.jar:3.2.7]
        at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:102) ~[mybatis-3.2.7.jar:3.2.7]
        at org.camunda.bpm.engine.impl.db.sql.DbSqlSession.selectList(DbSqlSession.java:87) ~[camunda-engine-7.4.0.jar:7.4.0]
        at org.camunda.bpm.engine.impl.db.entitymanager.DbEntityManager.selectListWithRawParameter(DbEntityManager.java:170) ~[camunda-engine-7.4.0.jar:7.4.0]
        at org.camunda.bpm.engine.impl.db.entitymanager.DbEntityManager.selectList(DbEntityManager.java:162) ~[camunda-engine-7.4.0.jar:7.4.0]
        at org.camunda.bpm.engine.impl.db.entitymanager.DbEntityManager.selectList(DbEntityManager.java:154) ~[camunda-engine-7.4.0.jar:7.4.0]
        at org.camunda.bpm.engine.impl.persistence.entity.HistoricDetailManager.findHistoricDetailsByQueryCriteria(HistoricDetailManager.java:87) ~[camunda-engine-7.4.0.jar:7.4.0]
        at org.camunda.bpm.engine.impl.HistoricDetailQueryImpl.executeList(HistoricDetailQueryImpl.java:146) ~[camunda-engine-7.4.0.jar:7.4.0]
        at org.camunda.bpm.engine.impl.AbstractQuery.evaluateExpressionsAndExecuteList(AbstractQuery.java:186) ~[camunda-engine-7.4.0.jar:7.4.0]
        at org.camunda.bpm.engine.impl.AbstractQuery.execute(AbstractQuery.java:165) ~[camunda-engine-7.4.0.jar:7.4.0]
        at org.camunda.bpm.engine.impl.interceptor.CommandExecutorImpl.execute(CommandExecutorImpl.java:24) ~[camunda-engine-7.4.0.jar:7.4.0]
        at org.camunda.bpm.engine.impl.interceptor.CommandContextInterceptor.execute(CommandContextInterceptor.java:95) [camunda-engine-7.4.0.jar:7.4.0]
        at org.camunda.bpm.engine.impl.interceptor.LogInterceptor.execute(LogInterceptor.java:30) [camunda-engine-7.4.0.jar:7.4.0]
        at org.camunda.bpm.engine.impl.AbstractQuery.list(AbstractQuery.java:139) [camunda-engine-7.4.0.jar:7.4.0]

It seems like the engine is having trouble with the Order By clause. I did some digging but have not seen anyone else encounter this issue. I am trying to retrieve a list of variable updates for a single variable in the order they occurred. With the list returned by this query, I hope to loop through and match the variableName with only the variable I am looking for. I was reading about how we should not sort by time but use orderPartiallyByOccurrence(). The Javadoc is throwing me off though as it seems to show that we need to know the variableInstanceId.

So I guess this is really 2 questions:

  1. Why am I getting the above exception?
  2. Am I using the correct query for my needs? If not, what should be the proper query?

Thanks!

Hi @mang,

I cannot reproduce that exception in a unit test, could you add full stack trace?

Cheers,
Askar

Hi @aakhmerov,

%d [%thread] %-5level %logger - %msg%n org.apache.ibatis.exceptions.PersistenceException:
### Error querying database.  Cause: org.apache.ibatis.builder.BuilderException: Error evaluating expression '         @org.camunda.bpm.engine.impl.db.sql.MybatisJoinHelper@orderBy(orderingProperty, index)'. Cause: org.apache.ibatis.ognl.MethodFailedException: Method "orderBy" failed for object class org.camunda.bpm.engine.impl.db.sql.MybatisJoinHelper [java.lang.NullPointerException]
### Cause: org.apache.ibatis.builder.BuilderException: Error evaluating expression '         @org.camunda.bpm.engine.impl.db.sql.MybatisJoinHelper@orderBy(orderingProperty, index)'. Cause: org.apache.ibatis.ognl.MethodFailedException: Method "orderBy" failed for object class org.camunda.bpm.engine.impl.db.sql.MybatisJoinHelper [java.lang.NullPointerException]
        at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:26) ~[mybatis-3.2.7.jar:3.2.7]
        at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:111) ~[mybatis-3.2.7.jar:3.2.7]
        at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:102) ~[mybatis-3.2.7.jar:3.2.7]
        at org.camunda.bpm.engine.impl.db.sql.DbSqlSession.selectList(DbSqlSession.java:87) ~[camunda-engine-7.4.0.jar:7.4.0]
        at org.camunda.bpm.engine.impl.db.entitymanager.DbEntityManager.selectListWithRawParameter(DbEntityManager.java:170) ~[camunda-engine-7.4.0.jar:7.4.0]
        at org.camunda.bpm.engine.impl.db.entitymanager.DbEntityManager.selectList(DbEntityManager.java:162) ~[camunda-engine-7.4.0.jar:7.4.0]
        at org.camunda.bpm.engine.impl.db.entitymanager.DbEntityManager.selectList(DbEntityManager.java:154) ~[camunda-engine-7.4.0.jar:7.4.0]
        at org.camunda.bpm.engine.impl.persistence.entity.HistoricDetailManager.findHistoricDetailsByQueryCriteria(HistoricDetailManager.java:87) ~[camunda-engine-7.4.0.jar:7.4.0]
        at org.camunda.bpm.engine.impl.HistoricDetailQueryImpl.executeList(HistoricDetailQueryImpl.java:146) ~[camunda-engine-7.4.0.jar:7.4.0]
        at org.camunda.bpm.engine.impl.AbstractQuery.evaluateExpressionsAndExecuteList(AbstractQuery.java:186) ~[camunda-engine-7.4.0.jar:7.4.0]
        at org.camunda.bpm.engine.impl.AbstractQuery.execute(AbstractQuery.java:165) ~[camunda-engine-7.4.0.jar:7.4.0]
        at org.camunda.bpm.engine.impl.interceptor.CommandExecutorImpl.execute(CommandExecutorImpl.java:24) ~[camunda-engine-7.4.0.jar:7.4.0]
        at org.camunda.bpm.engine.impl.interceptor.CommandContextInterceptor.execute(CommandContextInterceptor.java:95) [camunda-engine-7.4.0.jar:7.4.0]
        at org.camunda.bpm.engine.impl.interceptor.LogInterceptor.execute(LogInterceptor.java:30) [camunda-engine-7.4.0.jar:7.4.0]
        at org.camunda.bpm.engine.impl.AbstractQuery.list(AbstractQuery.java:139) [camunda-engine-7.4.0.jar:7.4.0]
        at com.cgi.wealth.workflow.engine.camunda.CamundaWorklist.getDuration(CamundaWorklist.java:833) [wm-workflow-1.1.0-SNAPSHOT.jar:?]
        at com.cgi.wealth.workflow.engine.camunda.CamundaWorklist.fromActiveCamundaTask(CamundaWorklist.java:172) [wm-workflow-1.1.0-SNAPSHOT.jar:?]
        at com.cgi.wealth.workflow.engine.camunda.CamundaWorklist.byId(CamundaWorklist.java:155) [wm-workflow-1.1.0-SNAPSHOT.jar:?]
        at com.cgi.bkifs.bso.prime.workflow.function.TaskFunction.setWorkflowInstanceVariables(TaskFunction.java:728) [Workflow-1.0.0-SNAPSHOT.jar:?]
        at com.cgi.bkifs.bso.prime.workflow.function.TaskFunction.reassignTask(TaskFunction.java:441) [Workflow-1.0.0-SNAPSHOT.jar:?]
        at com.cgi.bkifs.bso.prime.workflow.function.TaskFunction.completeTasks(TaskFunction.java:806) [Workflow-1.0.0-SNAPSHOT.jar:?]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.7.0_55]
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) ~[?:1.7.0_55]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.7.0_55]
        at java.lang.reflect.Method.invoke(Method.java:606) ~[?:1.7.0_55]
        at org.springframework.expression.spel.support.ReflectiveMethodExecutor.execute(ReflectiveMethodExecutor.java:72) [spring-expression-4.1.1.RELEASE.jar:4.1.1.RELEASE]
        at org.springframework.expression.spel.ast.MethodReference.getValueInternal(MethodReference.java:102) [spring-expression-4.1.1.RELEASE.jar:4.1.1.RELEASE]
        at org.springframework.expression.spel.ast.MethodReference.access$000(MethodReference.java:49) [spring-expression-4.1.1.RELEASE.jar:4.1.1.RELEASE]
        at org.springframework.expression.spel.ast.MethodReference$MethodValueRef.getValue(MethodReference.java:347) [spring-expression-4.1.1.RELEASE.jar:4.1.1.RELEASE]
        at org.springframework.expression.spel.ast.CompoundExpression.getValueInternal(CompoundExpression.java:87) [spring-expression-4.1.1.RELEASE.jar:4.1.1.RELEASE]
        at org.springframework.expression.spel.ast.SpelNodeImpl.getTypedValue(SpelNodeImpl.java:126) [spring-expression-4.1.1.RELEASE.jar:4.1.1.RELEASE]
        at org.springframework.expression.spel.standard.SpelExpression.getValue(SpelExpression.java:327) [spring-expression-4.1.1.RELEASE.jar:4.1.1.RELEASE]
        at org.springframework.integration.util.AbstractExpressionEvaluator.evaluateExpression(AbstractExpressionEvaluator.java:164) [spring-integration-core-4.1.2.RELEASE.jar:?]
        at org.springframework.integration.util.MessagingMethodInvokerHelper.processInternal(MessagingMethodInvokerHelper.java:276) [spring-integration-core-4.1.2.RELEASE.jar:?]
        at org.springframework.integration.util.MessagingMethodInvokerHelper.process(MessagingMethodInvokerHelper.java:142) [spring-integration-core-4.1.2.RELEASE.jar:?]
        at org.springframework.integration.handler.MethodInvokingMessageProcessor.processMessage(MethodInvokingMessageProcessor.java:75) [spring-integration-core-4.1.2.RELEASE.jar:?]
        at org.springframework.integration.handler.ServiceActivatingHandler.handleRequestMessage(ServiceActivatingHandler.java:71) [spring-integration-core-4.1.2.RELEASE.jar:?]
        at org.springframework.integration.handler.AbstractReplyProducingMessageHandler.handleMessageInternal(AbstractReplyProducingMessageHandler.java:99) [spring-integration-core-4.1.2.RELEASE.jar:?]
        at org.springframework.integration.handler.AbstractMessageHandler.handleMessage(AbstractMessageHandler.java:78) [spring-integration-core-4.1.2.RELEASE.jar:?]
        at org.springframework.integration.dispatcher.AbstractDispatcher.tryOptimizedDispatch(AbstractDispatcher.java:116) [spring-integration-core-4.1.2.RELEASE.jar:?]
        at org.springframework.integration.dispatcher.UnicastingDispatcher.doDispatch(UnicastingDispatcher.java:101) [spring-integration-core-4.1.2.RELEASE.jar:?]
        at org.springframework.integration.dispatcher.UnicastingDispatcher.dispatch(UnicastingDispatcher.java:97) [spring-integration-core-4.1.2.RELEASE.jar:?]
        at org.springframework.integration.channel.AbstractSubscribableChannel.doSend(AbstractSubscribableChannel.java:77) [spring-integration-core-4.1.2.RELEASE.jar:?]
        at org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:277) [spring-integration-core-4.1.2.RELEASE.jar:?]
        at org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:239) [spring-integration-core-4.1.2.RELEASE.jar:?]
        at org.springframework.messaging.core.GenericMessagingTemplate.doSend(GenericMessagingTemplate.java:115) [spring-messaging-4.1.1.RELEASE.jar:4.1.1.RELEASE]
        at org.springframework.messaging.core.GenericMessagingTemplate.doSend(GenericMessagingTemplate.java:45) [spring-messaging-4.1.1.RELEASE.jar:4.1.1.RELEASE]
        at org.springframework.messaging.core.AbstractMessageSendingTemplate.send(AbstractMessageSendingTemplate.java:95) [spring-messaging-4.1.1.RELEASE.jar:4.1.1.RELEASE]
        at org.springframework.integration.handler.AbstractMessageProducingHandler.sendOutput(AbstractMessageProducingHandler.java:248) [spring-integration-core-4.1.2.RELEASE.jar:?]
        at org.springframework.integration.handler.AbstractMessageProducingHandler.produceOutput(AbstractMessageProducingHandler.java:171) [spring-integration-core-4.1.2.RELEASE.jar:?]
        at org.springframework.integration.handler.AbstractMessageProducingHandler.sendOutputs(AbstractMessageProducingHandler.java:119) [spring-integration-core-4.1.2.RELEASE.jar:?]
        at org.springframework.integration.handler.AbstractReplyProducingMessageHandler.handleMessageInternal(AbstractReplyProducingMessageHandler.java:105) [spring-integration-core-4.1.2.RELEASE.jar:?]
        at org.springframework.integration.handler.AbstractMessageHandler.handleMessage(AbstractMessageHandler.java:78) [spring-integration-core-4.1.2.RELEASE.jar:?]
        at org.springframework.integration.dispatcher.AbstractDispatcher.tryOptimizedDispatch(AbstractDispatcher.java:116) [spring-integration-core-4.1.2.RELEASE.jar:?]
        at org.springframework.integration.dispatcher.UnicastingDispatcher.doDispatch(UnicastingDispatcher.java:101) [spring-integration-core-4.1.2.RELEASE.jar:?]
        at org.springframework.integration.dispatcher.UnicastingDispatcher.dispatch(UnicastingDispatcher.java:97) [spring-integration-core-4.1.2.RELEASE.jar:?]
        at org.springframework.integration.channel.AbstractSubscribableChannel.doSend(AbstractSubscribableChannel.java:77) [spring-integration-core-4.1.2.RELEASE.jar:?]
        at org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:277) [spring-integration-core-4.1.2.RELEASE.jar:?]
        at org.springframework.messaging.core.GenericMessagingTemplate.doSend(GenericMessagingTemplate.java:115) [spring-messaging-4.1.1.RELEASE.jar:4.1.1.RELEASE]
        at org.springframework.messaging.core.GenericMessagingTemplate.doSendAndReceive(GenericMessagingTemplate.java:150) [spring-messaging-4.1.1.RELEASE.jar:4.1.1.RELEASE]
        at org.springframework.messaging.core.GenericMessagingTemplate.doSendAndReceive(GenericMessagingTemplate.java:45) [spring-messaging-4.1.1.RELEASE.jar:4.1.1.RELEASE]
        at org.springframework.messaging.core.AbstractMessagingTemplate.sendAndReceive(AbstractMessagingTemplate.java:42) [spring-messaging-4.1.1.RELEASE.jar:4.1.1.RELEASE]
        at org.springframework.integration.gateway.MessagingGatewaySupport.doSendAndReceive(MessagingGatewaySupport.java:357) [spring-integration-core-4.1.2.RELEASE.jar:?]
        at org.springframework.integration.gateway.MessagingGatewaySupport.sendAndReceiveMessage(MessagingGatewaySupport.java:328) [spring-integration-core-4.1.2.RELEASE.jar:?]
        at org.springframework.integration.http.inbound.HttpRequestHandlingEndpointSupport.actualDoHandleRequest(HttpRequestHandlingEndpointSupport.java:492) [spring-integration-http-4.1.2.RELEASE.jar:?]
        at org.springframework.integration.http.inbound.HttpRequestHandlingEndpointSupport.doHandleRequest(HttpRequestHandlingEndpointSupport.java:389) [spring-integration-http-4.1.2.RELEASE.jar:?]
        at org.springframework.integration.http.inbound.HttpRequestHandlingMessagingGateway.handleRequest(HttpRequestHandlingMessagingGateway.java:103) [spring-integration-http-4.1.2.RELEASE.jar:?]
        at org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:51) [spring-webmvc-4.1.1.RELEASE.jar:4.1.1.RELEASE]
        at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:943) [spring-webmvc-4.1.1.RELEASE.jar:4.1.1.RELEASE]
        at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877) [spring-webmvc-4.1.1.RELEASE.jar:4.1.1.RELEASE]
        at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966) [spring-webmvc-4.1.1.RELEASE.jar:4.1.1.RELEASE]
        at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:868) [spring-webmvc-4.1.1.RELEASE.jar:4.1.1.RELEASE]
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:646) [servlet-api.jar:?]
        at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842) [spring-webmvc-4.1.1.RELEASE.jar:4.1.1.RELEASE]
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:727) [servlet-api.jar:?]
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) [catalina.jar:7.0.55]
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) [catalina.jar:7.0.55]
        at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) [tomcat7-websocket.jar:7.0.55]
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) [catalina.jar:7.0.55]
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) [catalina.jar:7.0.55]
        at com.cgi.bkifs.bso.prime.web.util.BSOHttpFilter.doFilter(BSOHttpFilter.java:43) [BSOHttpFilter.class:?]
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) [catalina.jar:7.0.55]
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) [catalina.jar:7.0.55]
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) [catalina.jar:7.0.55]
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) [catalina.jar:7.0.55]
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501) [catalina.jar:7.0.55]
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) [catalina.jar:7.0.55]
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) [catalina.jar:7.0.55]
        at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950) [catalina.jar:7.0.55]
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) [catalina.jar:7.0.55]
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) [catalina.jar:7.0.55]
        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070) [tomcat-coyote.jar:7.0.55]
        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611) [tomcat-coyote.jar:7.0.55]
        at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314) [tomcat-coyote.jar:7.0.55]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [?:1.7.0_55]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [?:1.7.0_55]
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-coyote.jar:7.0.55]
        at java.lang.Thread.run(Thread.java:745) [?:1.7.0_55]
Caused by: org.apache.ibatis.builder.BuilderException: Error evaluating expression '         @org.camunda.bpm.engine.impl.db.sql.MybatisJoinHelper@orderBy(orderingProperty, index)'. Cause: org.apache.ibatis.ognl.MethodFailedException: Method "orderBy" failed for object class org.camunda.bpm.engine.impl.db.sql.MybatisJoinHelper [java.lang.NullPointerException]
        at org.apache.ibatis.scripting.xmltags.OgnlCache.getValue(OgnlCache.java:50) ~[mybatis-3.2.7.jar:3.2.7]
        at org.apache.ibatis.scripting.xmltags.VarDeclSqlNode.apply(VarDeclSqlNode.java:32) ~[mybatis-3.2.7.jar:3.2.7]
        at org.apache.ibatis.scripting.xmltags.MixedSqlNode.apply(MixedSqlNode.java:32) ~[mybatis-3.2.7.jar:3.2.7]
        at org.apache.ibatis.scripting.xmltags.ForEachSqlNode.apply(ForEachSqlNode.java:79) ~[mybatis-3.2.7.jar:3.2.7]
        at org.apache.ibatis.scripting.xmltags.MixedSqlNode.apply(MixedSqlNode.java:32) ~[mybatis-3.2.7.jar:3.2.7]
        at org.apache.ibatis.scripting.xmltags.DynamicSqlSource.getBoundSql(DynamicSqlSource.java:40) ~[mybatis-3.2.7.jar:3.2.7]
        at org.apache.ibatis.mapping.MappedStatement.getBoundSql(MappedStatement.java:278) ~[mybatis-3.2.7.jar:3.2.7]
        at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:75) ~[mybatis-3.2.7.jar:3.2.7]
        at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:108) ~[mybatis-3.2.7.jar:3.2.7]
        ... 96 more
Caused by: org.apache.ibatis.ognl.MethodFailedException: Method "orderBy" failed for object class org.camunda.bpm.engine.impl.db.sql.MybatisJoinHelper
        at org.apache.ibatis.ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:837) ~[mybatis-3.2.7.jar:3.2.7]
        at org.apache.ibatis.ognl.ObjectMethodAccessor.callStaticMethod(ObjectMethodAccessor.java:48) ~[mybatis-3.2.7.jar:3.2.7]
        at org.apache.ibatis.ognl.OgnlRuntime.callStaticMethod(OgnlRuntime.java:847) ~[mybatis-3.2.7.jar:3.2.7]
        at org.apache.ibatis.ognl.ASTStaticMethod.getValueBody(ASTStaticMethod.java:65) ~[mybatis-3.2.7.jar:3.2.7]
        at org.apache.ibatis.ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:170) ~[mybatis-3.2.7.jar:3.2.7]
        at org.apache.ibatis.ognl.SimpleNode.getValue(SimpleNode.java:210) ~[mybatis-3.2.7.jar:3.2.7]
        at org.apache.ibatis.ognl.Ognl.getValue(Ognl.java:333) ~[mybatis-3.2.7.jar:3.2.7]
        at org.apache.ibatis.ognl.Ognl.getValue(Ognl.java:413) ~[mybatis-3.2.7.jar:3.2.7]
        at org.apache.ibatis.ognl.Ognl.getValue(Ognl.java:395) ~[mybatis-3.2.7.jar:3.2.7]
        at org.apache.ibatis.scripting.xmltags.OgnlCache.getValue(OgnlCache.java:48) ~[mybatis-3.2.7.jar:3.2.7]
        at org.apache.ibatis.scripting.xmltags.VarDeclSqlNode.apply(VarDeclSqlNode.java:32) ~[mybatis-3.2.7.jar:3.2.7]
        at org.apache.ibatis.scripting.xmltags.MixedSqlNode.apply(MixedSqlNode.java:32) ~[mybatis-3.2.7.jar:3.2.7]
        at org.apache.ibatis.scripting.xmltags.ForEachSqlNode.apply(ForEachSqlNode.java:79) ~[mybatis-3.2.7.jar:3.2.7]
        at org.apache.ibatis.scripting.xmltags.MixedSqlNode.apply(MixedSqlNode.java:32) ~[mybatis-3.2.7.jar:3.2.7]
        at org.apache.ibatis.scripting.xmltags.DynamicSqlSource.getBoundSql(DynamicSqlSource.java:40) ~[mybatis-3.2.7.jar:3.2.7]
        at org.apache.ibatis.mapping.MappedStatement.getBoundSql(MappedStatement.java:278) ~[mybatis-3.2.7.jar:3.2.7]
        at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:75) ~[mybatis-3.2.7.jar:3.2.7]
        at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:108) ~[mybatis-3.2.7.jar:3.2.7]
        ... 96 more

This exception doesn’t appear when I work in Windows Eclipse Tomcat. It appears when it’s executed on Tomcat in Linux. Could be environment but configuration is the same.