Collectives™ on Stack Overflow

Find centralized, trusted content and collaborate around the technologies you use most.

Learn more about Collectives

Teams

Q&A for work

Connect and share knowledge within a single location that is structured and easy to search.

Learn more about Teams

my project using mybatis plugin ,Occasionally, the following error will occur occasionally!

my used mybatis plugin tk.mybatis.mapper version 3.3.0 invoke Mapper interface

tk.mybatis.mapper.common.Mapper.updateByExampleSelective(@Param("record") T var1, @Param("example") Object var2);

Example:

 public interface EntiyObjectMapper extends Mapper<EntiyObject>{

I invoke:

Example example = new Example(EntiyObject.class);
entiyObjectMapper.updateByExampleSelective(entiyObject,example)

root Exception stack

 Caused by: org.apache.ibatis.ognl.NoSuchPropertyException: com.xxx.xxx.batch.model.pojo.XXXXXXXInfo.masFlag

this EntiyObject property magFlag is exist, 99% of the cases do not appear this error

I did not find similar questions on google, mybatis official website and ogln official website

I cannot find the specific cause of this problem!

here is full Exception stack:

[pool-9-thread-5] 2018-05-26 16:05:01.677 [ERROR] [CaseProcess.java:65] - XXXXXXXXX handle failed:org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.builder.BuilderException: Error evaluating expression 'record.masFlag != null'. Cause: org.apache.ibatis.ognl.NoSuchPropertyException: com.xxx.xxx.batch.model.pojo.XXXXXXXInfo.masFlag
at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:75)
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:371)
at com.sun.proxy.$Proxy20.update(Unknown Source)
at org.mybatis.spring.SqlSessionTemplate.update(SqlSessionTemplate.java:254)
at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:55)
at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:53)
at com.sun.proxy.$Proxy30.updateByExampleSelective(Unknown Source)
at com.xxx.xxx.batch.center.service.BaseDataService.insertXXXXXXXInfo(BaseDataService.java:163)
at com.xxx.xxx.batch.center.service.BaseDataService.subsideBo(BaseDataService.java:44)
at com.xxx.xxx.batch.center.service.XXXX.XXXXCaseService.execute(XXXXCaseService.java:47)
at com.xxx.xxx.batch.center.service.XXXX.XXXXCaseService$$FastClassBySpringCGLIB$$39bfb230.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:721)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:282)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:656)
at com.xxx.xxx.batch.center.service.XXXX.XXXXCaseService$$EnhancerBySpringCGLIB$$608b51ee.execute(<generated>)
at com.xxx.xxx.batch.center.RoutingService.execute(RoutingService.java:70)
at com.xxx.xxx.batch.center.CaseProcess.process(CaseProcess.java:45)
at com.xxx.xxx.batch.mq.MQAccessBuilder$3.consume(MQAccessBuilder.java:101)
at com.xxx.xxx.batch.mq.ThreadPoolConsumer$1.run(ThreadPoolConsumer.java:94)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: org.apache.ibatis.builder.BuilderException: Error evaluating expression 'record.masFlag != null'. Cause: org.apache.ibatis.ognl.NoSuchPropertyException: com.xxx.xxx.batch.model.pojo.XXXXXXXInfo.masFlag
at org.apache.ibatis.scripting.xmltags.OgnlCache.getValue(OgnlCache.java:46)
at org.apache.ibatis.scripting.xmltags.ExpressionEvaluator.evaluateBoolean(ExpressionEvaluator.java:32)
at org.apache.ibatis.scripting.xmltags.IfSqlNode.apply(IfSqlNode.java:34)
at org.apache.ibatis.scripting.xmltags.MixedSqlNode.apply(MixedSqlNode.java:33)
at org.apache.ibatis.scripting.xmltags.TrimSqlNode.apply(TrimSqlNode.java:55)
at org.apache.ibatis.scripting.xmltags.MixedSqlNode.apply(MixedSqlNode.java:33)
at org.apache.ibatis.scripting.xmltags.DynamicSqlSource.getBoundSql(DynamicSqlSource.java:41)
at org.apache.ibatis.mapping.MappedStatement.getBoundSql(MappedStatement.java:279)
at org.apache.ibatis.executor.statement.BaseStatementHandler.<init>(BaseStatementHandler.java:64)
at org.apache.ibatis.executor.statement.PreparedStatementHandler.<init>(PreparedStatementHandler.java:39)
at org.apache.ibatis.executor.statement.RoutingStatementHandler.<init>(RoutingStatementHandler.java:45)
at org.apache.ibatis.session.Configuration.newStatementHandler(Configuration.java:502)
at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:47)
at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:115)
at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:75)
at sun.reflect.GeneratedMethodAccessor636.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:63)
at com.sun.proxy.$Proxy73.update(Unknown Source)
at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:170)
at sun.reflect.GeneratedMethodAccessor633.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:358)
... 25 more
Caused by: org.apache.ibatis.ognl.NoSuchPropertyException: com.xxx.xxx.batch.model.pojo.XXXXXXXInfo.masFlag
at org.apache.ibatis.ognl.ObjectPropertyAccessor.getProperty(ObjectPropertyAccessor.java:151)
at org.apache.ibatis.ognl.OgnlRuntime.getProperty(OgnlRuntime.java:2420)
at org.apache.ibatis.ognl.ASTProperty.getValueBody(ASTProperty.java:114)
at org.apache.ibatis.ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212)
at org.apache.ibatis.ognl.SimpleNode.getValue(SimpleNode.java:258)
at org.apache.ibatis.ognl.ASTChain.getValueBody(ASTChain.java:141)
at org.apache.ibatis.ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212)
at org.apache.ibatis.ognl.SimpleNode.getValue(SimpleNode.java:258)
at org.apache.ibatis.ognl.ASTNotEq.getValueBody(ASTNotEq.java:50)
at org.apache.ibatis.ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212)
at org.apache.ibatis.ognl.SimpleNode.getValue(SimpleNode.java:258)
at org.apache.ibatis.ognl.Ognl.getValue(Ognl.java:494)
at org.apache.ibatis.ognl.Ognl.getValue(Ognl.java:458)
at org.apache.ibatis.scripting.xmltags.OgnlCache.getValue(OgnlCache.java:44)
... 49 more

Please help me!

Welcome to Stack Overflow! Please take some time to read the How to Ask page and improve your question: we can't tell you what the problem is without seeing some code. – Alexander Leithner May 27, 2018 at 15:35

For future reference, this is a known issue.
See https://github.com/mybatis/mybatis-3/issues/623

TL;DR

  • Upgrading to MyBatis 3.4.2+ AND Java 1.8.0_25+ should fix the problem.
  • If you cannot upgrade, there seems to be a workaround.
  • The error seems pretty straightforward. The property masFlag does not exist in the parameter object.

    Does the class com.xxx.xxx.batch.model.pojo.XXXXXXXInfo has that property and/or getter & setter?

    Otherwise, post the < mapper >.

    Just a wild guess here. If the property is of type java.lang.Boolean, the getter must be "getMasFlag()", not "isMasFlag()". The latter is suitable for boolean only. What type is the property? What's the name of the getter? – The Impaler Jun 8, 2018 at 14:26

    Thanks for contributing an answer to Stack Overflow!

    • Please be sure to answer the question. Provide details and share your research!

    But avoid

    • Asking for help, clarification, or responding to other answers.
    • Making statements based on opinion; back them up with references or personal experience.

    To learn more, see our tips on writing great answers.