当前使用版本(必填,否则不予处理)

3.4.1

该问题是如何引起的?(确定最新版也有问题再提!!!)

使用MPJLambdaWrapper做表关联时,一个表的Mapper删除了,导致抛了异常

经分析,TableInfoHelper.getTableInfo 只从缓存中取表信息,没有Mapper的表不会初始化到缓存,可以增加降级逻辑,通过实体类Class初始化表信息并写入缓存中。

重现步骤(如果有就写完整)

// 当 Account实体的Mapper删除后,会抛异常 MPJLambdaWrapper wrapper = new MPJLambdaWrapper() .selectAll(User.class) .leftJoin(Account.class, Account::getUserId, User::getUserId);

报错信息

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.builder.BuilderException: Error evaluating expression 'ew.from != null and ew.from != '''. Cause: org.apache.ibatis.ognl.OgnlException: from [java.lang.NullPointerException] at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:96) ~[mybatis-spring-2.0.6.jar!/:2.0.6] at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:441) ~[mybatis-spring-2.0.6.jar!/:2.0.6] at com.sun.proxy.$Proxy169.selectList(Unknown Source) ~[na:na] at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:224) ~[mybatis-spring-2.0.6.jar!/:2.0.6] at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.executeForMany(MybatisMapperMethod.java:173) ~[mybatis-plus-core-3.4.1.jar!/:3.4.1] at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:78) ~[mybatis-plus-core-3.4.1.jar!/:3.4.1] at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148) ~[mybatis-plus-core-3.4.1.jar!/:3.4.1] at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89) ~[mybatis-plus-core-3.4.1.jar!/:3.4.1] at com.sun.proxy.$Proxy215.selectJoinList(Unknown Source) ~[na:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] at org.hotswap.agent.plugin.spring.getbean.HotswapSpringInvocationHandler.doInvoke(HotswapSpringInvocationHandler.java:69) ~[slf4j-api-1.7.30-kwai-2.jar!/:na] at org.hotswap.agent.plugin.spring.getbean.HotswapSpringInvocationHandler.invoke(HotswapSpringInvocationHandler.java:64) ~[slf4j-api-1.7.30-kwai-2.jar!/:na] at com.sun.proxy.$Proxy217.selectJoinList(Unknown Source) ~[na:na] at com.kuaishou.ad.infra.mars.core.service.impl.PlanSignUpServiceImpl.getUserSignPlanOutSide(PlanSignUpServiceImpl.java:178) ~[ad-infra-mars-entity-service-1.0.17-SNAPSHOT.jar!/:1.0.17-SNAPSHOT] at com.kuaishou.ad.infra.mars.core.service.impl.PlanSignUpServiceImpl$$FastClassBySpringCGLIB$$5e5110ea.invoke() ~[ad-infra-mars-entity-service-1.0.17-SNAPSHOT.jar!/:1.0.17-SNAPSHOT] at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ~[spring-core-5.1.10-kwai-12.jar!/:5.1.10-kwai-12] at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:685) ~[spring-aop-5.1.10-kwai-12.jar!/:5.1.10-kwai-12] at com.kuaishou.ad.infra.mars.core.service.impl.PlanSignUpServiceImpl$$EnhancerBySpringCGLIB$$319b0c2b.getUserSignPlanOutSide() ~[ad-infra-mars-entity-service-1.0.17-SNAPSHOT.jar!/:1.0.17-SNAPSHOT] at com.kuaishou.ad.infra.mars.domain.service.plan.impl.PlanSignUpOutsideDomainServiceImpl.querySignUpInfoForAgent(PlanSignUpOutsideDomainServiceImpl.java:104) ~[ad-infra-mars-domain-service-1.0.17-SNAPSHOT.jar!/:1.0.17-SNAPSHOT] at com.kuaishou.ad.infra.mars.provider.rpc.plan.AdInfraPlanSignUpService.querySignUpInfoForAgent(AdInfraPlanSignUpService.java:744) ~[classes!/:1.0.17-SNAPSHOT] at com.kuaishou.protobuf.ad.infra.plan.signup.KrpcAdInfraPlanSignUpServiceGrpc$AdInfraPlanSignUpServiceImplBaseV2.querySignUpInfoForAgent(KrpcAdInfraPlanSignUpServiceGrpc.java:5653) ~[ad-infra-mars-sdk-1.0.17-SNAPSHOT.jar!/:1.0.17-SNAPSHOT] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] at com.kuaishou.krpc.invoker.ServerInvoker.invoke(ServerInvoker.java:47) ~[krpc-config-sdk-1.0.166.jar!/:1.0.166] at com.kuaishou.krpc.governance.sentinel.server.ServerGovernanceInterceptor.intercept(ServerGovernanceInterceptor.java:74) ~[krpc-governance-sentinel-1.0.166.jar!/:1.0.166] at com.kuaishou.krpc.rpc.interceptor.InterceptInvoker.invoke(InterceptInvoker.java:48) ~[krpc-rpc-sdk-1.0.166.jar!/:1.0.166] at com.kuaishou.krpc.rpc.interceptor.InterceptorChain.invoke(InterceptorChain.java:61) ~[krpc-rpc-sdk-1.0.166.jar!/:1.0.166] at com.kuaishou.krpc.invoker.ServerProxyInvoker.invoke(ServerProxyInvoker.java:56) ~[krpc-config-sdk-1.0.166.jar!/:1.0.166] at com.kuaishou.protobuf.ad.infra.plan.signup.KrpcAdInfraPlanSignUpServiceGrpc$IAdInfraPlanSignUpService_proxy_63.querySignUpInfoForAgent(KrpcAdInfraPlanSignUpServiceGrpc$IAdInfraPlanSignUpService_proxy_63.java) ~[na:1.0.17-SNAPSHOT] at com.kuaishou.protobuf.ad.infra.plan.signup.KrpcAdInfraPlanSignUpServiceGrpc$MethodHandlers.invoke(KrpcAdInfraPlanSignUpServiceGrpc.java:6293) ~[ad-infra-mars-sdk-1.0.17-SNAPSHOT.jar!/:1.0.17-SNAPSHOT] at io.grpc.stub.ServerCalls$UnaryServerCallHandler$UnaryServerCallListener.onHalfClose(ServerCalls.java:182) ~[grpc-stub-1.36.1-kwai-1.1.jar!/:1.36.1-kwai-1.1] at com.kuaishou.infra.patronum.traffic.record.grpc.server.ServerTrafficRecordInterceptor$2.onHalfClose(ServerTrafficRecordInterceptor.java:167) ~[infra-patronum-record-grpc-sdk-1.0.53.jar!/:1.0.53] at com.kuaishou.infra.ktrace.instrument.server.KtraceGrpcServerInterceptor$KtraceServerCallListener.onHalfClose(KtraceGrpcServerInterceptor.java:377) ~[ktrace-grpc-instrument-sdk-1.0.186.jar!/:1.0.186] at com.kuaishou.krpc.rpc.grpc.interceptor.internal.server.KrpcTraceContextServerInterceptor$1.onHalfClose(KrpcTraceContextServerInterceptor.java:61) ~[krpc-rpc-grpc-1.0.166.jar!/:1.0.166] at com.kuaishou.krpc.rpc.grpc.interceptor.internal.server.KrpcScopeInterceptor$1.onHalfClose(KrpcScopeInterceptor.java:309) ~[krpc-rpc-grpc-1.0.166.jar!/:1.0.166] at com.kuaishou.krpc.rpc.grpc.interceptor.internal.server.KrpcServerProfilingInterceptor$2.onHalfClose(KrpcServerProfilingInterceptor.java:258) ~[krpc-rpc-grpc-1.0.166.jar!/:1.0.166] at io.grpc.PartialForwardingServerCallListener.onHalfClose(PartialForwardingServerCallListener.java:35) ~[grpc-api-1.36.1-kwai-1.1.jar!/:1.36.1-kwai-1.1] at io.grpc.ForwardingServerCallListener.onHalfClose(ForwardingServerCallListener.java:23) ~[grpc-api-1.36.1-kwai-1.1.jar!/:1.36.1-kwai-1.1] at io.grpc.ForwardingServerCallListener$SimpleForwardingServerCallListener.onHalfClose(ForwardingServerCallListener.java:40) ~[grpc-api-1.36.1-kwai-1.1.jar!/:1.36.1-kwai-1.1] at io.grpc.util.TransmitStatusRuntimeExceptionInterceptor$1.onHalfClose(TransmitStatusRuntimeExceptionInterceptor.java:74) ~[grpc-core-1.36.1-kwai-1.1.jar!/:1.36.1-kwai-1.1] at io.grpc.PartialForwardingServerCallListener.onHalfClose(PartialForwardingServerCallListener.java:35) ~[grpc-api-1.36.1-kwai-1.1.jar!/:1.36.1-kwai-1.1] at io.grpc.ForwardingServerCallListener.onHalfClose(ForwardingServerCallListener.java:23) ~[grpc-api-1.36.1-kwai-1.1.jar!/:1.36.1-kwai-1.1] at io.grpc.ForwardingServerCallListener$SimpleForwardingServerCallListener.onHalfClose(ForwardingServerCallListener.java:40) ~[grpc-api-1.36.1-kwai-1.1.jar!/:1.36.1-kwai-1.1] at com.kuaishou.krpc.rpc.grpc.interceptor.internal.server.KrpcJumpToExecutorInterceptor$1.lambda$onHalfClose$0(KrpcJumpToExecutorInterceptor.java:88) ~[krpc-rpc-grpc-1.0.166.jar!/:1.0.166] at io.grpc.Context$1.run(Context.java:579) ~[grpc-context-1.36.1-kwai-1.1.jar!/:1.36.1-kwai-1.1] at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na] at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na] at io.grpc.netty.shaded.io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[grpc-netty-shaded-1.36.1-kwai-1.1.jar!/:1.36.1-kwai-1.1] at java.base/java.lang.Thread.run(Thread.java:829) ~[na:na] Caused by: org.apache.ibatis.builder.BuilderException: Error evaluating expression 'ew.from != null and ew.from != '''. Cause: org.apache.ibatis.ognl.OgnlException: from [java.lang.NullPointerException] at org.apache.ibatis.scripting.xmltags.OgnlCache.getValue(OgnlCache.java:48) ~[mybatis-3.5.7.jar!/:3.5.7] at org.apache.ibatis.scripting.xmltags.ExpressionEvaluator.evaluateBoolean(ExpressionEvaluator.java:32) ~[mybatis-3.5.7.jar!/:3.5.7] at org.apache.ibatis.scripting.xmltags.IfSqlNode.apply(IfSqlNode.java:34) ~[mybatis-3.5.7.jar!/:3.5.7] at org.apache.ibatis.scripting.xmltags.MixedSqlNode.lambda$apply$0(MixedSqlNode.java:32) ~[mybatis-3.5.7.jar!/:3.5.7] at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) ~[na:na] at org.apache.ibatis.scripting.xmltags.MixedSqlNode.apply(MixedSqlNode.java:32) ~[mybatis-3.5.7.jar!/:3.5.7] at org.apache.ibatis.scripting.xmltags.DynamicSqlSource.getBoundSql(DynamicSqlSource.java:39) ~[mybatis-3.5.7.jar!/:3.5.7] at org.apache.ibatis.mapping.MappedStatement.getBoundSql(MappedStatement.java:305) ~[mybatis-3.5.7.jar!/:3.5.7] at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:53) ~[mybatis-plus-extension-3.4.1.jar!/:3.4.1] at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:62) ~[mybatis-3.5.7.jar!/:3.5.7] at com.sun.proxy.$Proxy283.query(Unknown Source) ~[na:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] at org.apache.ibatis.plugin.Invocation.proceed(Invocation.java:49) ~[mybatis-3.5.7.jar!/:3.5.7] at com.github.yulichang.interceptor.MPJInterceptor.intercept(MPJInterceptor.java:82) ~[mybatis-plus-join-1.2.4.jar!/:na] at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:62) ~[mybatis-3.5.7.jar!/:3.5.7] at com.sun.proxy.$Proxy283.query(Unknown Source) ~[na:na] at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:151) ~[mybatis-3.5.7.jar!/:3.5.7] at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:145) ~[mybatis-3.5.7.jar!/:3.5.7] at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140) ~[mybatis-3.5.7.jar!/:3.5.7] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:427) ~[mybatis-spring-2.0.6.jar!/:2.0.6] ... 52 common frames omitted Caused by: org.apache.ibatis.ognl.OgnlException: from at org.apache.ibatis.ognl.OgnlRuntime.getMethodValue(OgnlRuntime.java:2165) ~[mybatis-3.5.7.jar!/:3.5.7] at org.apache.ibatis.ognl.ObjectPropertyAccessor.getPossibleProperty(ObjectPropertyAccessor.java:66) ~[mybatis-3.5.7.jar!/:3.5.7] at org.apache.ibatis.ognl.ObjectPropertyAccessor.getProperty(ObjectPropertyAccessor.java:160) ~[mybatis-3.5.7.jar!/:3.5.7] at org.apache.ibatis.ognl.OgnlRuntime.getProperty(OgnlRuntime.java:3373) ~[mybatis-3.5.7.jar!/:3.5.7] at org.apache.ibatis.ognl.ASTProperty.getValueBody(ASTProperty.java:121) ~[mybatis-3.5.7.jar!/:3.5.7] at org.apache.ibatis.ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212) ~[mybatis-3.5.7.jar!/:3.5.7] at org.apache.ibatis.ognl.SimpleNode.getValue(SimpleNode.java:258) ~[mybatis-3.5.7.jar!/:3.5.7] at org.apache.ibatis.ognl.ASTChain.getValueBody(ASTChain.java:141) ~[mybatis-3.5.7.jar!/:3.5.7] at org.apache.ibatis.ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212) ~[mybatis-3.5.7.jar!/:3.5.7] at org.apache.ibatis.ognl.SimpleNode.getValue(SimpleNode.java:258) ~[mybatis-3.5.7.jar!/:3.5.7] at org.apache.ibatis.ognl.ASTNotEq.getValueBody(ASTNotEq.java:50) ~[mybatis-3.5.7.jar!/:3.5.7] at org.apache.ibatis.ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212) ~[mybatis-3.5.7.jar!/:3.5.7] at org.apache.ibatis.ognl.SimpleNode.getValue(SimpleNode.java:258) ~[mybatis-3.5.7.jar!/:3.5.7] at org.apache.ibatis.ognl.ASTAnd.getValueBody(ASTAnd.java:61) ~[mybatis-3.5.7.jar!/:3.5.7] at org.apache.ibatis.ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212) ~[mybatis-3.5.7.jar!/:3.5.7] at org.apache.ibatis.ognl.SimpleNode.getValue(SimpleNode.java:258) ~[mybatis-3.5.7.jar!/:3.5.7] at org.apache.ibatis.ognl.Ognl.getValue(Ognl.java:586) ~[mybatis-3.5.7.jar!/:3.5.7] at org.apache.ibatis.ognl.Ognl.getValue(Ognl.java:550) ~[mybatis-3.5.7.jar!/:3.5.7] at org.apache.ibatis.scripting.xmltags.OgnlCache.getValue(OgnlCache.java:46) ~[mybatis-3.5.7.jar!/:3.5.7] ... 78 common frames omitted Caused by: java.lang.NullPointerException: null at com.github.yulichang.wrapper.MPJLambdaWrapper.getFrom(MPJLambdaWrapper.java:223) ~[mybatis-plus-join-1.2.4.jar!/:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] at org.apache.ibatis.ognl.OgnlRuntime.invokeMethodInsideSandbox(OgnlRuntime.java:1266) ~[mybatis-3.5.7.jar!/:3.5.7] at org.apache.ibatis.ognl.OgnlRuntime.invokeMethod(OgnlRuntime.java:1251) ~[mybatis-3.5.7.jar!/:3.5.7] at org.apache.ibatis.ognl.OgnlRuntime.getMethodValue(OgnlRuntime.java:2163) ~[mybatis-3.5.7.jar!/:3.5.7] ... 96 common frames omitted

Comment From: miemieYaho

不会这么做