【问题标题】:NPE in HQL subqueryHQL 子查询中的 NPE
【发布时间】:2010-10-15 14:02:39
【问题描述】:

我在以下 HQL 查询中有错误:

         em.createQuery(
            "SELECT new com.magenta.sovereign.entity.view.ThirdPartyReportView(" +
                    "e.id, " +
                    "e.vehicleRegistrationNumber, " +
                    "e.driverName, " +
                    "e.thirdPartyAssignee.firstName, " +
                    "e.thirdPartyAssignee.middleName, " +
                    "e.thirdPartyAssignee.lastName, " +
                    "e.totalDamageCost, " +
                    "e.date, " +
                    "tp.regNumber, " +
                    "tp.name, " +
                    "tp.thirdPartyFault, " +
                    "tp.settlementDetails, " +
                    "e.claimStatus, " +
                    "e.currentStatus," +
                    "(SELECT max(invoice1.date) FROM Invoice invoice1 WHERE invoice1.claim = e )  " +

            ") FROM Claim e left join e.thirdParties tp")
            .setMaxResults(10);

如果我从查询中删除子选择,一切正常

"(SELECT max(invoice1.date) FROM Invoice invoice1 WHERE invoice1.claim = e )  " 

但是使用子查询我有以下错误:

  javax.ejb.EJBException: java.lang.NullPointerException
              at org.jboss.ejb3.tx.Ejb3TxPolicy.handleExceptionInOurTx(Ejb3TxPolicy.java:63)
              at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:83)
              at org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:191)
              at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
              at org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:95)
              at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
              at org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(StatelessInstanceInterceptor.java:62)
              at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
              at org.jboss.aspects.security.AuthenticationInterceptor.invoke(AuthenticationInterceptor.java:77)
              at org.jboss.ejb3.security.Ejb3AuthenticationInterceptor.invoke(Ejb3AuthenticationInterceptor.java:110)
              at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
              at org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:46)
              at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
              at org.jboss.ejb3.asynchronous.AsynchronousInterceptor.invoke(AsynchronousInterceptor.java:106)
              at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
              at org.jboss.ejb3.stateless.StatelessContainer.dynamicInvoke(StatelessContainer.java:304)
              at org.jboss.aop.Dispatcher.invoke(Dispatcher.java:106)
              at org.jboss.aspects.remoting.AOPRemotingInvocationHandler.invoke(AOPRemotingInvocationHandler.java:82)
              at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:809)
              at org.jboss.remoting.transport.socket.ServerThread.processInvocation(ServerThread.java:608)
              at org.jboss.remoting.transport.socket.ServerThread.dorun(ServerThread.java:406)
              at org.jboss.remoting.transport.socket.ServerThread.run(ServerThread.java:173)
          Caused by: java.lang.NullPointerException
              at org.hibernate.hql.ast.tree.FromClause.findIntendedAliasedFromElementBasedOnCrazyJPARequirements(FromClause.java:120)
              at org.hibernate.hql.ast.tree.FromClause.getFromElement(FromClause.java:107)
              at org.hibernate.hql.ast.tree.FromElementFactory.addFromElement(FromElementFactory.java:81)
              at org.hibernate.hql.ast.tree.FromClause.addFromElement(FromClause.java:70)
              at org.hibernate.hql.ast.HqlSqlWalker.createFromElement(HqlSqlWalker.java:255)
              at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromElement(HqlSqlBaseWalker.java:3056)
              at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromElementList(HqlSqlBaseWalker.java:2945)
              at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromClause(HqlSqlBaseWalker.java:688)
              at org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:544)
              at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectExpr(HqlSqlBaseWalker.java:2014)
              at org.hibernate.hql.antlr.HqlSqlBaseWalker.aliasedSelectExpr(HqlSqlBaseWalker.java:2057)
              at org.hibernate.hql.antlr.HqlSqlBaseWalker.constructor(HqlSqlBaseWalker.java:2226)
              at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectExpr(HqlSqlBaseWalker.java:1952)
              at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectExprList(HqlSqlBaseWalker.java:1825)
              at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectClause(HqlSqlBaseWalker.java:1394)
              at org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:553)
              at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:281)
              at org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:229)
              at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:228)
              at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:160)
              at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:111)
              at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:77)
              at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:56)
              at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:72)
              at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:133)
              at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:112)
              at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1623)
              at org.hibernate.ejb.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:92)
              at org.jboss.ejb3.entity.TransactionScopedEntityManager.createQuery(TransactionScopedEntityManager.java:134)
              at com.magenta.sovereign.ejb.ReportingServiceBean.getThirdPartyReportView(ReportingServiceBean.java:72)
              at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
              at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
              at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
              at java.lang.reflect.Method.invoke(Method.java:616)
              at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:112)
              at org.jboss.ejb3.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:166)
              at com.magenta.sovereign.ejb.AbstractBean.aroundInvoke(AbstractBean.java:63)
              at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
              at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
              at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
              at java.lang.reflect.Method.invoke(Method.java:616)
              at org.jboss.ejb3.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:146)
              at org.jboss.ejb3.interceptor.EJB3InterceptorsInterceptor.invoke(EJB3InterceptorsInterceptor.java:63)
              at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
              at org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor.invoke(TransactionScopedEntityManagerInterceptor.java:54)
              at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
              at org.jboss.ejb3.AllowedOperationsInterceptor.invoke(AllowedOperationsInterceptor.java:47)
              at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
              at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:79)
              at org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:191)
              at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
              at org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:95)
              at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
              at org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(StatelessInstanceInterceptor.java:62)
              at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
              at org.jboss.aspects.security.AuthenticationInterceptor.invoke(AuthenticationInterceptor.java:77)
              at org.jboss.ejb3.security.Ejb3AuthenticationInterceptor.invoke(Ejb3AuthenticationInterceptor.java:110)
              at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
              at org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:46)
              at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
              at org.jboss.ejb3.asynchronous.AsynchronousInterceptor.invoke(AsynchronousInterceptor.java:106)
              at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
              at org.jboss.ejb3.stateless.StatelessContainer.dynamicInvoke(StatelessContainer.java:304)
              at org.jboss.aop.Dispatcher.invoke(Dispatcher.java:106)
              at org.jboss.aspects.remoting.AOPRemotingInvocationHandler.invoke(AOPRemotingInvocationHandler.java:82)
              at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:809)
              at org.jboss.remoting.transport.socket.ServerThread.processInvocation(ServerThread.java:608)
              at org.jboss.remoting.transport.socket.ServerThread.dorun(ServerThread.java:406)
              at org.jboss.remoting.transport.socket.ServerThread.run(ServerThread.java:173)
              at org.jboss.remoting.MicroRemoteClientInvoker.invoke(MicroRemoteClientInvoker.java:163)
              at org.jboss.remoting.Client.invoke(Client.java:1634)
              at org.jboss.remoting.Client.invoke(Client.java:548)
              at org.jboss.aspects.remoting.InvokeRemoteInterceptor.invoke(InvokeRemoteInterceptor.java:62)
              at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
              at org.jboss.aspects.tx.ClientTxPropagationInterceptor.invoke(ClientTxPropagationInterceptor.java:67)
              at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
              at org.jboss.aspects.security.SecurityClientInterceptor.invoke(SecurityClientInterceptor.java:53)
              at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
              at org.jboss.ejb3.remoting.IsLocalInterceptor.invoke(IsLocalInterceptor.java:74)
              at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
              at org.jboss.ejb3.stateless.StatelessRemoteProxy.invoke(StatelessRemoteProxy.java:107)
              at $Proxy16.getThirdPartyReportView(Unknown Source)
              at com.magenta.sovereign.client.reporting.ThirdPartyReport.getReportData(ThirdPartyReport.java:79)
              at com.magenta.sovereign.client.reporting.AbstractExcelReport.doReport(AbstractExcelReport.java:200)
              at com.magenta.sovereign.client.reporting.AbstractExcelReport.report(AbstractExcelReport.java:163)
              at com.magenta.sovereign.client.view.reporting.ReportingController$11.run(ReportingController.java:168)
              at org.jboss.aspects.remoting.InvokeRemoteInterceptor.invoke(InvokeRemoteInterceptor.java:74)
              at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
              at org.jboss.aspects.tx.ClientTxPropagationInterceptor.invoke(ClientTxPropagationInterceptor.java:67)
              at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
              at org.jboss.aspects.security.SecurityClientInterceptor.invoke(SecurityClientInterceptor.java:53)
              at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
              at org.jboss.ejb3.remoting.IsLocalInterceptor.invoke(IsLocalInterceptor.java:74)
              at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
              at org.jboss.ejb3.stateless.StatelessRemoteProxy.invoke(StatelessRemoteProxy.java:107)
              at $Proxy16.getThirdPartyReportView(Unknown Source)
              at com.magenta.sovereign.client.reporting.ThirdPartyReport.getReportData(ThirdPartyReport.java:79)
              at com.magenta.sovereign.client.reporting.AbstractExcelReport.doReport(AbstractExcelReport.java:200)
              at com.magenta.sovereign.client.reporting.AbstractExcelReport.report(AbstractExcelReport.java:163)
              at com.magenta.sovereign.client.view.reporting.ReportingController$11.run(ReportingController.java:168)

你能描述一下问题吗

【问题讨论】:

  • 我想知道子查询的哪一部分导致了问题。但是您的案例过于复杂和具体,无法重现。也许让它更简单。
  • PS:FromClause#findIntendedAliasedFromElementBasedOnCrazyJPARequirements() 让我发笑 :)

标签: java hibernate orm hql


【解决方案1】:

此查询失败并出现同样的错误

从 ArregloCuota a 中选择 a.arreglo.deuda.estudio.id = :estudioID AND a.arreglo.anulado = FALSE AND a.arregloPagoRealizado 为空且 a.arreglo.deuda.id 不在(选择 lu.deuda .id FROM LlamadoListadoPorUsuarioDetalle lu WHERE lu.listado.gestion.fechaHoraCierre IS NULL) ORDER BY a.arreglo.id DESC, a.numeroCuota ASC

但添加这项工作

从 ArregloCuota 中选择 a INNER JOIN a.arreglo aa 其中 aa.deuda.estudio.id = :estudioID AND aa.anulado = 错误且 a.arregloPagoRealizado 为 NULL 且 aa.deuda.id 不在(从 LlamadoListadoPorUsuarioDetalle lu 中选择 lu.deuda.id,其中 lu.listado.gestion.fechaHoraCierre 为 NULL)由 a.arreglo 订购。 id DESC,a.numeroCuota ASC

【讨论】:

    【解决方案2】:

    尝试通过进行连接(例如:join e.thirdPartyAssignee third)和投影(如:third.firstName)来分离 e.thirdPartyAssignee.firstName 等表达式

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多