Java JPA createQuery,当列表为null或空时,将传递列表作为参数
我正在尝试使用多个表中的联接和作为参数传递列表来创建查询。我在查询字符串中放入null和empty检查。但是,我在QueryNode.getDataType上得到了NullPointerException。下面是查询和异常Java JPA createQuery,当列表为null或空时,将传递列表作为参数,java,mysql,sql,jpa,Java,Mysql,Sql,Jpa,我正在尝试使用多个表中的联接和作为参数传递列表来创建查询。我在查询字符串中放入null和empty检查。但是,我在QueryNode.getDataType上得到了NullPointerException。下面是查询和异常 query = em.createQuery("select avg(kpi.duration), kpi.taskId from KPI kpi, User user, UserRole userRole, Shop shop where " +
query = em.createQuery("select avg(kpi.duration), kpi.taskId from KPI kpi, User user, UserRole userRole, Shop shop where " +
"(user.clientId = :customer or :customer is null) and (kpi.userId in :users or :users is null or :users = '' ) and " +
"(userRole.role in :roles or :roles is null or :roles = '') and (shop.shopName in :shopNames or :shopNames is null or :shopNames = '') " +
"and kpi.userId = userRole.userId and kpi.userId = user.id and kpi.userId = shop.userId group by kpi.taskId");
query.setParameter("customer",customer);
query.setParameter(“users”,users);
query.setParameter(“roles”,roles);
query.setParameter("shopNames", shopNames);
if (query != null){
List<Object[]> result = query.getResultList();
}
query=em.createQuery(“从kpi中选择平均值(kpi.duration)、kpi.taskId、用户用户用户、用户角色用户角色、店铺位置”+
“(user.clientId=:customer或:customer为null)和(kpi.userId in:users或:users为null或:users=”)和”+
(userRole.role-in:roles或:roles为null或:roles='')和(shop.shopName-in:shopNames或:shopNames为null或:shopNames='')+
“和kpi.userId=userRole.userId和kpi.userId=user.id和kpi.userId=shop.userId按kpi.taskId分组”);
query.setParameter(“客户”,客户);
query.setParameter(“用户”,用户);
query.setParameter(“角色”,角色);
query.setParameter(“shopNames”,shopNames);
if(查询!=null){
List result=query.getResultList();
}
用户、角色和店名是列表,客户是字符串。我已经创建了只使用带有空检查的字符串的查询,并且成功了。然而,在列表中,它出现了以下错误。任何不检查if-else逻辑中每个参数的建议
[请求处理失败;嵌套异常为
java.lang.NullPointerException]及其根本原因
位于的java.lang.NullPointerException
org.hibernate.hql.internal.ast.tree.QueryNode.getDataType(QueryNode.java:164)
在
org.hibernate.hql.internal.ast.tree.AbstractNullnessCheckNode.extractDataType(AbstractNullnessCheckNode.java:118)
在
org.hibernate.hql.internal.ast.tree.AbstractNullnessCheckNode.initialize(AbstractNullnessCheckNode.java:52)
在
org.hibernate.hql.internal.ast.hqlslwalker.prepareLogioCoperator(hqlslwalker.java:1224)
在
org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.comparisonextpr(HqlSqlBaseWalker.java:4218)
在
org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:1935)
在
org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:1888)
在
org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:1885)
在
org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:1863)
在
org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:1860)
在
org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:1860)
在
org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:1860)
在
org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:1860)
在
org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:1860)
在
org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.where子句(HqlSqlBaseWalker.java:794)
在
org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:595)
在
org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:299)
在
org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:247)
在
org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:248)
在
org.hibernate.hql.internal.ast.QueryTranslatorImpl.docomFile(QueryTranslatorImpl.java:183)
在
org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:136)
在
org.hibernate.engine.query.spi.HQLQueryPlan.(HQLQueryPlan.java:105)
在
org.hibernate.engine.query.spi.HQLQueryPlan.(HQLQueryPlan.java:80)
在
org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:168)
在
org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:219)
位于org.hibernate.internal.SessionImpl.list(SessionImpl.java:1240)
org.hibernate.internal.QueryImpl.list(QueryImpl.java:101)位于
org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:257)位于
sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)位于
invoke(NativeMethodAccessorImpl.java:57)
在
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
位于java.lang.reflect.Method.invoke(Method.java:606)
org.springframework.orm.jpa.SharedEntityManagerCreator$DeferredQueryInvocationHandler.invoke(SharedEntityManagerCreator.java:311)
位于com.sun.proxy.$Proxy161.getResultList(未知源)
com.ge.turbo.repository.KpiTaskRepositoryCustomImpl.getKPIData(KpiTaskRepositoryCustomImpl.java:93)
位于的sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)
invoke(NativeMethodAccessorImpl.java:57)
在
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
位于java.lang.reflect.Method.invoke(Method.java:606)
org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.executeMethodOn(RepositoryFactorySupport.java:333)
在
org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:308)
在
org.springframework.aop.framework.ReflectiveMethodInvocation.procedue(ReflectiveMethodInvocation.java:172)
在
org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:96)
在
org.springframework.transaction.interceptor.TransactionSpectSupport.invokeWithinTransaction(TransactionSpectSupport.java:260)
在
org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:94)
在
org.springframework.aop.framewo