jooq中Ambiguous match found for ...问题
关于在jooq编程中遇到Ambiguous match found for f_create_time. Both "exam"."t_question"."f_create_time" and "exam"."t_question"."f_create_time" match.问题排查。
在网上看了一下资料,一般出现Ambiguous match found问题,都可以初步判断为模糊匹配问题,直接看看日志和代码。
日志报错:
2018-12-25 17:27:54.547 INFO 7 --- [883-thread-2997] org.jooq.impl.Fields : Ambiguous match found for f_create_time. Both "exam"."t_question"."f_create_time" and "exam"."t_question"."f_create_time" match.
java.sql.SQLWarning: null
at org.jooq.impl.Fields.field(Fields.java:134) [jooq-3.9.6.jar!/:na]
at org.jooq.impl.Fields.indexOf(Fields.java:272) [jooq-3.9.6.jar!/:na]
at org.jooq.impl.RowImpl.indexOf(RowImpl.java:314) [jooq-3.9.6.jar!/:na]
at org.jooq.impl.AbstractRecord$TransferRecordState.operate(AbstractRecord.java:750) [jooq-3.9.6.jar!/:na]
at org.jooq.impl.RecordDelegate.operate(RecordDelegate.java:128) [jooq-3.9.6.jar!/:na]
at org.jooq.impl.AbstractRecord.into(AbstractRecord.java:720) [na:na]
at org.jooq.impl.ResultImpl.into(ResultImpl.java:2179) [jooq-3.9.6.jar!/:na]
at com.zxy.product.exam.service.support.DimensionServiceSupport.findDimensions(DimensionServiceSupport.java:144) [classes!/:9.5.9]
at com.zxy.product.exam.service.support.DimensionServiceSupport.lambda$findDimensionsByResearchId$0(DimensionServiceSupport.java:101) [classes!/:9.5.9]
at com.zxy.common.cache.redis.RedisCacheService$RedisCache.get(RedisCacheService.java:63) ~[common-cache-0.0.2-SNAPSHOT.jar!/:0.0.2-SNAPSHOT]
at com.zxy.common.cache.redis.RedisCacheService$RedisCache.get(RedisCacheService.java:93) ~[common-cache-0.0.2-SNAPSHOT.jar!/:0.0.2-SNAPSHOT]
at com.zxy.product.exam.service.support.DimensionServiceSupport.findDimensionsByResearchId(DimensionServiceSupport.java:101) [classes!/:9.5.9]
at sun.reflect.GeneratedMethodAccessor304.invoke(Unknown Source) ~[na:na]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_101]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_101]
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:333) ~[spring-aop-4.3.15.RELEASE.jar!/:4.3.15.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190) ~[spring-aop-4.3.15.RELEASE.jar!/:4.3.15.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) ~[spring-aop-4.3.15.RELEASE.jar!/:4.3.15.RELEASE]
at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99) ~[spring-tx-4.3.15.RELEASE.jar!/:4.3.15.RELEASE]
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:282) ~[spring-tx-4.3.15.RELEASE.jar!/:4.3.15.RELEASE]
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96) ~[spring-tx-4.3.15.RELEASE.jar!/:4.3.15.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.3.15.RELEASE.jar!/:4.3.15.RELEASE]
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213) ~[spring-aop-4.3.15.RELEASE.jar!/:4.3.15.RELEASE]
at com.sun.proxy.$Proxy72.findDimensionsByResearchId(Unknown Source) ~[na:na]
at com.alibaba.dubbo.common.bytecode.Wrapper29.invokeMethod(Wrapper29.java) ~[dubbo-2.8.4.jar!/:2.8.4]
at com.alibaba.dubbo.rpc.proxy.javassist.JavassistProxyFactory$1.doInvoke(JavassistProxyFactory.java:46) ~[dubbo-2.8.4.jar!/:2.8.4]
at com.alibaba.dubbo.rpc.proxy.AbstractProxyInvoker.invoke(AbstractProxyInvoker.java:72) ~[dubbo-2.8.4.jar!/:2.8.4]
at com.alibaba.dubbo.rpc.protocol.InvokerWrapper.invoke(InvokerWrapper.java:53) ~[dubbo-2.8.4.jar!/:2.8.4]
at com.zxy.common.rpc.filter.CustomerExceptionFilter.invoke(CustomerExceptionFilter.java:23) ~[common-rpc-0.0.3.jar!/:0.0.3]
at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91) ~[dubbo-2.8.4.jar!/:2.8.4]
at com.alibaba.dubbo.monitor.support.MonitorFilter.invoke(MonitorFilter.java:65) ~[dubbo-2.8.4.jar!/:2.8.4]
at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91) ~[dubbo-2.8.4.jar!/:2.8.4]
at com.alibaba.dubbo.rpc.filter.TimeoutFilter.invoke(TimeoutFilter.java:42) ~[dubbo-2.8.4.jar!/:2.8.4]
at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91) ~[dubbo-2.8.4.jar!/:2.8.4]
at com.alibaba.dubbo.rpc.protocol.dubbo.filter.TraceFilter.invoke(TraceFilter.java:78) ~[dubbo-2.8.4.jar!/:2.8.4]
at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91) ~[dubbo-2.8.4.jar!/:2.8.4]
at com.alibaba.dubbo.rpc.filter.ContextFilter.invoke(ContextFilter.java:70) ~[dubbo-2.8.4.jar!/:2.8.4]
at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91) ~[dubbo-2.8.4.jar!/:2.8.4]
at com.alibaba.dubbo.rpc.filter.GenericFilter.invoke(GenericFilter.java:132) ~[dubbo-2.8.4.jar!/:2.8.4]
at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91) ~[dubbo-2.8.4.jar!/:2.8.4]
at com.alibaba.dubbo.rpc.filter.ClassLoaderFilter.invoke(ClassLoaderFilter.java:38) ~[dubbo-2.8.4.jar!/:2.8.4]
at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91) ~[dubbo-2.8.4.jar!/:2.8.4]
at com.alibaba.dubbo.rpc.filter.EchoFilter.invoke(EchoFilter.java:38) ~[dubbo-2.8.4.jar!/:2.8.4]
at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91) ~[dubbo-2.8.4.jar!/:2.8.4]
at com.alibaba.dubbo.rpc.protocol.dubbo.DubboProtocol$1.reply(DubboProtocol.java:113) ~[dubbo-2.8.4.jar!/:2.8.4]
at com.alibaba.dubbo.remoting.exchange.support.header.HeaderExchangeHandler.handleRequest(HeaderExchangeHandler.java:84) ~[dubbo-2.8.4.jar!/:2.8.4]
at com.alibaba.dubbo.remoting.exchange.support.header.HeaderExchangeHandler.received(HeaderExchangeHandler.java:170) ~[dubbo-2.8.4.jar!/:2.8.4]
at com.alibaba.dubbo.remoting.transport.DecodeHandler.received(DecodeHandler.java:52) ~[dubbo-2.8.4.jar!/:2.8.4]
at com.alibaba.dubbo.remoting.transport.dispatcher.ChannelEventRunnable.run(ChannelEventRunnable.java:82) ~[dubbo-2.8.4.jar!/:2.8.4]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) ~[na:1.8.0_101]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) ~[na:1.8.0_101]
at java.lang.Thread.run(Thread.java:745) ~[na:1.8.0_101]
找到对应代码:
找到144行,可以看到是record结果映射到实体出错,继续追踪record
找到问题,干掉多余的create_time。ok。
个人吐槽一下:这个jooq是真的不好用,尤其是排查问题,需要不停的进行sql组装,然后一点也不直观。