首页 文章

QueryDSL where子句的NullPointerException

提问于
浏览
0

使用带有hibernate的Query DSL(Spring Data JPA)来构建一个类似的查询

if( bankId != null ){
        query.where(
            coopMember.personId.bankAccountId.isNotNull().and(
            coopMember.personId.bankAccountId.bankBranch.bankId.eq(bankId))
        );
    }

    return query.fetch();

这里的逻辑很简单:如果有人关联的银行帐户,请按银行ID过滤结果 .

BankAccount 实体的 BankBranch 保存 bankId 整数值 . CoopMember 实体可能有也可能没有 BankAccount

问题是当执行上述QueryDSL查询时,即使进行了非空检查,也会抛出 NullPointerException .

更新

在更改逻辑时,会抛出相同的错误 . 我想知道为什么 bankBranch 不能"null-checked":

if( bankId != null ){
        query.where(
                coopMember.personId.bankAccountId.isNotNull().and(
                        coopMember.personId.bankAccountId.bankBranch.isNotNull())
        );
    }

抛出stacktrace之后:

java.lang.NullPointerException:位于re.iprocu.repository.lmpl.MemberRepositoryImpl.findMembersByPaymentModes(MemberRepositoryImpl.java:306)〜[classes /:na]的re.iprocu.repository.impl.MemberRepositoryImpl $$ FastClassBySpringCGLIB $$ 6aae55eb .invoke()〜[classes /:na] at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)〜[spring-core-4.3.13.RELEASE.jar:4.3.13.RELEASE]在org.springframework.aop.framework.CglibAopProxy $ CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:738)〜[spring-aop-4.3.13.RELEASE.jar:4.3.13.RELEASE] org.springframework.aop.framework . 在org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:136)中的ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)〜[spring-aop-4.3.13.RELEASE.jar:4.3.13.RELEASE]〜 [spring-tx-4.3.13.RELEASE.jar:4.3.13.RELEASE]在org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java) :179)〜[spring-aop-4.3.13.RELEASE.jar:4.3.13.RELEASE] org.springframework.aop.framework.CglibAopProxy $ DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:673)〜[spring-aop- 4.3.13.RELEASE.jar:4.3.13.RELEASE] at re.iprocu.repository.impl.MemberRepositoryImpl $$ EnhancerBySpringCGLIB $$ 8dc2283d.findMembersByPaymentModes()〜[classes /:na] at sun.reflect.NativeMethodAccessorImpl.invoke0(本地方法)〜[na:1.8.0_111] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)〜[na:1.8.0_111] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)〜 [na:1.8.0_111] at java.lang.reflect.Method.invoke(Method.java:498)〜[na:1.8.0_111] at org.springframework.data.repository.core.support.RepositoryFactorySupport $ QueryExecutorMethodInterceptor.executeMethodOn (RepositoryFactorySupport.java:520)〜[spring-data-commons-1.13.9.RELEASE.jar:na] at org.springframework.data.repository.core.support.RepositoryFactorySupport $ QueryExecutorMethodInterceptor . doInvoke(RepositoryFactorySupport.java:495)〜[spring-data-commons-1.13.9.RELEASE.jar:na] at org.springframework.data.repository.core.support.RepositoryFactorySupport $ QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:477 )〜[spring-data-commons-1.13.9.RELEASE.jar:na] org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)〜[spring-aop-4.3.13.RELEASE . jar:4.3.13.RELEASE]在org.springframework的org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:56)〜[spring-data-commons-1.13.9.RELEASE.jar:na] . aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)〜[spring-aop-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.transaction.interceptor.TransactionInterceptor $ 1.proceedWithInvocation(TransactionInterceptor . java:99)〜[spring-tx-4.3.13.RELEASE.jar:4.3.13.RELEASE] org.springframework.transaction.interceptor.Tran org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)中的sactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:282)〜[spring-tx-4.3.13.RELEASE.jar:4.3.13.RELEASE]〜 [spring-tx-4.3.13.RELEASE.jar:4.3.13.RELEASE]在org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)〜[spring-aop-4.3.13.RELEASE . jar:4.3.13.RELEASE] org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:136)〜[spring-tx-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org . springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)〜[spring-aop-4.3.13.RELEASE.jar:4.3.13.RELEASE] org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor $ CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:133)〜[spring-data-jpa-1.11.9.RELEASE.jar:na] org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)〜[spring-aop-4.3.13.RELEASE.jar:4.3.13.RELEASE] org.springframework.aop.interceptor.ExposeInvocationInterceptor . 调用(ExposeInvocationInterceptor.java:92)〜[spring-aop-4.3.13.RELEASE.jar:4.3.13.RELEASE] atorg.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)〜[spring-aop-4.3.13.RELEASE.jar:4.3.13.RELEASE] org.springframework.data.repository.core.support .SurroundingTransactionDetectorMethodInterceptor.invoke(SurroundingTransactionDetectorMethodInterceptor.java:57)〜[spring-data-commons-1.13.9.RELEASE.jar:na] org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)〜[ spring-aop-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213)〜[spring-aop-4.3.13.RELEASE.jar :4.3.13.RELEASE] at com.sun.proxy . $ Proxy189.findMembersByPaymentModes(Unknown Source)〜[na:na] at re.iprocu.service.impl.PaymentPeriodServiceBean.findMemberPaymentModeDetails(PaymentPeriodServiceBean.java:183)〜[classes /:na] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)〜[na:1.8.0_111] at sun.reflect.NativeMethodAccessorImpl.invoke(Native MethodAccessorImpl.java:62)〜[na:1.8.0_111] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)〜[na:1.8.0_111] at java.lang.reflect.Method.invoke(Method . java:498)〜[na:1.8.0_111] org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:333)〜[spring-aop-4.3.13.RELEASE.jar:4.3.13.RELEASE在Org.springframework.aop.frame.RevlectiveMethodInvocation org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190)〜[spring-aop-4.3.13.RELEASE.jar:4.3.13.RELEASE] org.springframework.aop.framework.ReflectiveMethodInvocation .proceed(ReflectiveMethodInvocation.java:157)〜[spring-aop-4.3.13.RELEASE.jar:4.3.13.RELEASE] org.springframework.transaction.interceptor.TransactionInterceptor $ 1.proceedWithInvocation(TransactionInterceptor.java:99)〜 [spring-tx-4.3.13.RELEASE.jar:4.3.13.RELEASE]在org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:282)〜[spring-tx-4.3 .13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)〜[spring-tx-4.3.13.RELEASE.jar:4.3.13 . 在org.springframework.aop.framework的org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)〜[spring-aop-4.3.13.RELEASE.jar:4.3.13.RELEASE]中发布 . com.sun.proxy上的JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213)〜[spring-aop-4.3.13.RELEASE.jar:4.3.13.RELEASE] . $ Proxy191.findMemberPaymentModeDetails(Unknown Source)〜[na:na ]在sun.reflect的sun.reflect.NativeMethodAccessorImpl.invoke0(本地方法)〜[na:1.8.0_111]的re.iprocu.api.PaymentPeriodController.memberPaymentsByPaymentMode(PaymentPeriodController.java:299)〜[classes /:na] . NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)〜[na:1.8.0_111] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)〜[na:1.8.0_111] at java.lang.reflect.Method . 调用(方法.java:498)〜[na:1.8.0_111] at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)〜[spring-web-4.3.13.RELEASE.jar:4.3 .13.RELEASE] org.springframework上的org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:133)〜[spring-web-4.3.13.RELEASE.jar:4.3.13.RELEASE] org.springframework.web.servlet中的.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:97)〜[spring-webmvc-4.3.13.RELEASE.jar:4.3.13.RELEASE] . org.springframework.web.servlet.mvc.method.annotation中的mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827)~ [spring-webmvc-4.3.13.RELEASE.jar:4.3.13.RELEASE] .RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738)〜[spring-webmvc-4.3.13.RELEASE.jar:4.3.13.RELEASE] org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAd apter.handle(AbstractHandlerMethodAdapter.java:85)〜[spring-webmvc-4.3.13.RELEASE.jar:4.3.13.RELEASE]在org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967)〜 [spring-webmvc-4.3.13.RELEASE.jar:4.3.13.RELEASE]在org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901)~ [spring-webmvc-4.3.13.RELEASE . jar:4.3.13.RELEASE] org.springframework上的org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)[spring-webmvc- 4.3.13.RELEASE.jar:4.3.13.RELEASE .web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)[spring-webmvc-4.3.13.RELEASE.jar:4.3.13.RELEASE],位于javax.servlet.http.HttpServlet.service(HttpServlet.java:687) )[javax.servlet-api-3.1.0.jar:3.1.0]在org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)[spring-webmvc-4.3.13.RELEASE.jar: 4.3.13.RELEASE]在javax.servlet.http.HttpServlet.service(HttpServlet.java:790)[javax.servlet-api-3.1.0.jar:3.1.0] at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85)[undertow-servlet-1.4.21.Final.jar:1.4 .forFinal]在org.springframework的io.undertow.servlet.handlers.FilterHandler $ FilterChainImpl.doFilter(FilterHandler.java:129)[undertow-servlet-1.4.21.Final.jar:1.4.21.Final] . web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:101)[spring-web-4.3.13.RELEASE.jar:4.3.13.RELEASE] at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java: 61)[endow-servlet-1.4.21.Final.jar:1.4.21.Final] at io.undertow.servlet.handlers.FilterHandler $ FilterChainImpl.doFilter(FilterHandler.java:131)[undertow-servlet-1.4.21 .Final.jar:1.4.21.Final]在org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:317)[spring-security-web-4.2.3.RELEASE.jar:4.2.3 .RELEASE]在org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.jav) a:127)[spring-security-web-4.2.3.RELEASE.jar:4.2.3.RELEASE] org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:91)[spring -security-web-4.2.3.RELEASE.jar:4.2.3.RELEASE]在org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:331)[spring-security-web-4.2.3 .RELEASE.jar:4.2.3.RELEASE]在org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:114)[spring-security-web-4.2.3.RELEASE.jar:4.2.3 .RELEASE] org.springframework上的org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:331)[spring-security-web-4.2.3.RELEASE.jar:4.2.3.RELEASE] . security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:137)[spring-security-web-4.2.3.RELEASE.jar:4.2.3.RELEASE]在org.springframework.security.web.FilterChainProxy $ VirtualFilterChain . 的doFilter(FilterChainProxy.java: 331)[spring-security-web-4.2.3.RELEASE.jar:4.2.3.RELEASE] org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:111)[spring-security-web -4.2.3.RELEASE.jar:4.2.3.RELEASE]在org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:331)[spring-security-web-4.2.3.RELEASE.jar :4.2.3.RELEASE]在org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:170)[spring-security-web-4.2.3.RELEASE.jar:4.2.3.RELEASE] at org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:331)org.springframework.security.web中的[spring-security-web-4.2.3.RELEASE.jar:4.2.3.RELEASE] . savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)[spring-security-web-4.2.3.RELEASE.jar:4.2.3.RELEASE] org.springframework.security.web.FilterChainProxy $ VirtualFilt erChain.doFilter(FilterChainProxy.java:331)[spring-security-web-4.2.3.RELEASE.jar:4.2.3.RELEASE] at re.iprocu.utils.jwt.JwtAuthenticationTokenFilter.doFilterInternal(JwtAuthenticationTokenFilter.java:67)在org.springframework.security的org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)[spring-web-4.3.13.RELEASE.jar:4.3.13.RELEASE]的[classes /:na] .web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:331)[spring-security-web-4.2.3.RELEASE.jar:4.2.3.RELEASE] org.springframework.security.web.authentication.logout.LogoutFilter ordo.springframework.security.web.FilterChainProxy $ . VirtualFilterChain.doFilter . ( . ) )org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:64)中的[spring-security-web-4.2.3.RELEASE.jar:4.2.3.RELEASE] [spring-security-web- 4.2.3.RELEASE.jar:4.2.3.RELEAS E] org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)[spring-web-4.3.13.RELEASE.jar:4.3.13.RELEASE] org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:331)[spring-security-web-4.2.3.RELEASE.jar:4.2.3.RELEASE] org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java) :105)[org.springframework.security.web.FilterChainProxy的[spring-security-web-4.2.3.RELEASE.jar:4.2.3.RELEASE] $ VirtualFilterChain.doFilter(FilterChainProxy.java:331)[spring-security- web-4.2.3.RELEASE.jar:4.2.3.RELEASE] at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:56)[spring-security-web-4.2 . 3.RELEASE.jar:4.2.3.RELEASE]在org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)[spring-web-4.3.13.RELEASE.jar:4.3.13.RELEASE]org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:331)org.springframework.security.web上的[spring-security-web-4.2.3.RELEASE.jar:4.2.3.RELEASE] .FlterChainProxy.doFilterInternal(FilterChainProxy.java:214)[spring-security-web-4.2.3.RELEASE.jar:4.2.3.RELEASE] org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:177 )[spring-security-web-4.2.3.RELEASE.jar:4.2.3.RELEASE] org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:347)[spring-web-4.3.13 . RELEASE.jar:4.3.13.RELEASE]在org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:263)[spring-web-4.3.13.RELEASE.jar:4.3.13.RELEASE] at io .undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)[undertow-servlet-1.4.21.Final.jar:1.4.21.Final] at io.undertow.servlet.handlers.FilterHandler $ FilterChainImpl.doFilter (FilterHandler.java:131)[undertow-servlet-1.4.21.Final.j ar:1.4.21.Final]在org.springframework的org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)[spring-web-4.3.13.RELEASE.jar:4.3.13.RELEASE] .web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)[spring-web-4.3.13.RELEASE.jar:4.3.13.RELEASE] at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java) :61)[supow-servlet-1.4.21.Final.jar:1.4.21.Final] at io.undertow.servlet.handlers.FilterHandler $ FilterChainImpl.doFilter(FilterHandler.java:131)[undertow-servlet-1.4 . 21.Final.jar:1.4.21.Final] at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:108)[spring-web-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)[spring-web-4.3.13.RELEASE.jar:4.3.13.RELEASE] at io.undertow.servlet.core.ManagedFilter.doFilter (ManagedFilter.java:61)[undertow-servlet-1.4.21.Final.jar:1.4.21.Final] at在org.springframework.web.filter.HiddenHttpMethodFilter中的io.undertow.servlet.handlers.FilterHandler $ FilterChainImpl.doFilter(FilterHandler.java:131)[undertow-servlet-1.4.21.Final.jar:1.4.21.Final] . 在org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)的doFilterInternal(HiddenHttpMethodFilter.java:81)[spring-web-4.3.13.RELEASE.jar:4.3.13.RELEASE] [spring-web -4.3.13.RELEASE.jar:4.3.13.RELEASE] at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)[undertow-servlet-1.4.21.Final.jar:1.4.21 .Final]在org.springframework.web的io.undertow.servlet.handlers.FilterHandler $ FilterChainImpl.doFilter(FilterHandler.java:131)[undertow-servlet-1.4.21.Final.jar:1.4.21.Final] . filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)[spring-web-4.3.13.RELEASE.jar:4.3.13.RELEASE] org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [ spring 网络4.3.13.RELEASE.jar:4.3.13.RELEASE ] io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)[undertow-servlet-1.4.21.Final.jar:1.4.21.Final] at io.undertow.servlet.handlers.FilterHandler $ FilterChainImpl.doFilter(FilterHandler.java:131)[undertow-servlet-1.4.21.Final.jar:1.4.21.Final] at io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84)[下载] -servlet-1.4.21.Final.jar:1.4.21.Final] at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)[undertow-servlet-1.4.21.Final.jar在io.undertow的io.undertow.servlet.handlers.ServletChain $ 1.handleRequest(ServletChain.java:64)[undertow-servlet-1.4.21.Final.jar:1.4.21.Final]:1.4.21.Final] io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler)中的.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)[undertow-servlet-1.4.21.Final.jar:1.4.21.Final] .java:131)[下载vlet-1.4.21.Final.jar:1.4.21.Final] at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)[undertow-servlet-1.4.21.Final.jar: 1.4.21.Final]在io.undertow.security的io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)[undertow-core-1.4.21.Final.jar:1.4.21.Final] .handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)[undertow-core-1.4.21.Final.jar:1.4.21.Final] at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java :64)[underow-servlet-1.4.21.Final.jar:1.4.21.Final] at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60)[undertow-core-1.4.21 . Final.jar:1.4.21.Final] at在io.undertow.security.handlers.AbstractSecurityContextAssociationHandler中的io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77)[undertow-servlet-1.4.21.Final.jar:1.4.21.Final] . handleRequest(AbstractSecurityContextAssociationHandler.java:43)[undertow-core-1.4.21.Final.jar:1.4.21.Final] at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)[undertow-core -1.4.21.Final.jar:1.4.21.Final] at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)[undertow-core-1.4.21.Final.jar:1.4.21 .Final]在io.undertow.servlet.handlers上的io.undertow.servlet.handlers.SessionRestoringHandler.handleRequest(SessionRestoringHandler.java:119)[undertow-servlet-1.4.21.Final.jar:1.4.21.Final] . ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:292)[undertow-servlet-1.4.21.Final.jar:1.4.21.Final] at io.undertow.servlet.handlers.ServletInitialHandler.access $ 100(ServletInitialHandler.java:81)[undertow-servlet-1.4.21.Final.jar:1.4.21.Final] at io.undertow.servlet.handlers.ServletInitialHandler $ 2.call(ServletInitialHandler.java:138)[underow- servlet-1.4.21.Final.jar:1.4.21.Final] at io.undertow.servlet.handlers.ServletInitialHandler $ 2.call(ServletInitialHandler.java:135)[undertow-servlet-1.4.21.Final.jar:1.4在io.undertow.servlet的io.undertow.servlet.core.ServletRequestContextThreadSetupAction $ 1.call(ServletRequestContextThreadSetupAction.java:48)[undertow-servlet-1.4.21.Final.jar:1.4.21.Final] .core.ContextClassLoaderSetupAction $ 1.call(ContextClassLoaderSetupAction.java:43)[undertow-servlet-1.4.21.Final.jar:1.4.21.Final] at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java: 272)[underow-servlet-1.4.21.Final.jar:1.4.21.Final] at io.undertow.servlet.handlers.ServletInitialHandler.access $ 000(ServletInitialHandler.java:81)[undertow-servlet-1.4.21 . Final.jar:1.4.21.Final] at io.undert在io.undertow.server.Connectors.executeRootHandler(Connectors.java)中的ow.servlet.handlers.ServletInitialHandler $ 1.handleRequest(ServletInitialHandler.java:104)[undertow-servlet-1.4.21.Final.jar:1.4.21.Final] :332)[supow-core-1.4.21.Final.jar:1.4.21.Final] at io.undertow.server.HttpServerExchange $ 1.run(HttpServerExchange.java:830)[lowow-core-1.4.21.Final .jar:1.4.21.Final] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)[na:1.8.0_111] at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java: 617)[na:1.8.0_111] at java.lang.Thread.run(Thread.java:745)[na:1.8.0_111]

1 回答

  • 0

    coopMember.personId.bankAccountId.bankBranch 中使用调试器 bankBranch 是null,这根本没有意义,因为所有 bankAccount 必须与 bankBranch 相关联 .

    对我有用的是以不同的方式编写查询 . 在 coopMember.personId.bankAccountId 左连接 bankAccount 然后执行where子句

    JPAQuery<Integer> query = queryFactory.query()
            .select(coopMember.memberId)
            .distinct()
            .from(coopMember)
            .leftJoin(coopMember.personId.bankAccountId, bankAccount)
            .where(coopMember.voided.isFalse());
        if( bankId != null ){
            query.where(
                    bankAccount.isNotNull().and(bankAccount.bankBranch.bankId.eq(bankId))
            );
        }
    

    这样做使我能够访问 bankBranch 而不抛出 NullPointerException (虽然我仍然不明白为什么直接访问 bankBranch 就像问题中的问题是不可能的) .

相关问题