【发布时间】:2021-02-24 18:20:38
【问题描述】:
我有以下 HQL 查询:
SELECT examen, OrganeSaisiMission
FROM com.an.eloi.model.domaine.amendement.Amendement as amendementOrigine
join amendementOrigine.divisionExamen as divisionExamenOrigine
join divisionExamenOrigine.examenOrigine as examen
join examen.organeSaisi as organeSaisi
join organeSaisi.texteDeLoi as texteDeLoi
left join OrganeSaisiMission with OrganeSaisiMission.missionPlf.id = amendementOrigine.missionPlf.id and OrganeSaisiMission.organeSaisi.id = organeSaisi.id
join organeSaisi.organe as organe
order by getTriBibard(texteDeLoi.texteBibard) asc, texteDeLoi.textePartie asc, examen.examenSecondeDeliberation asc
我得到一个错误:
2020-11-12 18:32:10,603 ERROR [http-bio-8080-exec-1] - Path expected for join! - at org.hibernate.hql.PARSER(reportError:56)
2020-11-12 18:32:10,607 ERROR [http-bio-8080-exec-1] - [Ljava.lang.StackTraceElement;@ad757a9 - at java.lang.Object(error:46)
java.lang.NullPointerException
at org.hibernate.hql.ast.util.SessionFactoryHelper.findSQLFunction(SessionFactoryHelper.java:364)
at org.hibernate.hql.ast.tree.IdentNode.getDataType(IdentNode.java:293)
at org.hibernate.hql.ast.tree.SelectClause.initializeExplicitSelectClause(SelectClause.java:154)
at org.hibernate.hql.ast.HqlSqlWalker.useSelectClause(HqlSqlWalker.java:857)
at org.hibernate.hql.ast.HqlSqlWalker.processQuery(HqlSqlWalker.java:645)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:685)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:301)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:244)
at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:256)
at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:187)
at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:138)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:101)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:80)
at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:124)
at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:156)
at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:135)
at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1770)
at com.an.eloi.model.dao.examen.ExamenDAO.findExamensForMenuItem(ExamenDAO.java:161)
at com.an.eloi.model.domaine.examen.Examen.findExamensForMenuItem(Examen.java:82)
at com.an.eloi.service.transactionnel.grilleV2.moteur.Regles.checkAmendementsRedeposables(Regles.java:658)
at com.an.eloi.service.transactionnel.grilleV2.moteur.Regles.processItemBoutonRedeposer(Regles.java:567)
at com.an.eloi.service.transactionnel.grilleV2.moteur.Regles.executeReglesSelect(Regles.java:1222)
at com.an.eloi.service.transactionnel.grilleV2.moteur.MoteurReglesMenuBarre.executeSelect(MoteurReglesMenuBarre.java:1222)
at com.an.eloi.service.transactionnel.grilleV2.etat.SelectState.genereBarMenu(SelectState.java:63)
at com.an.eloi.service.transactionnel.grilleV2.MenuService.executerBarreMenuService(MenuService.java:639)
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:606)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:96)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:260)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:94)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:91)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
at com.sun.proxy.$Proxy99.executerBarreMenuService(Unknown Source)
at com.an.eloi.facade.grilleV2.GrilleSimpleFacade.executerBarreMenuService(GrilleSimpleFacade.java:181)
at com.an.eloi.web.controller.barreoutils.BarreOutilsController.loadBarreMenu(BarreOutilsController.java:101)
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:606)
at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:215)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:743)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:672)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:82)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:919)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:851)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:953)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:844)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:829)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at com.an.eloi.common.EloiActionFilter.doHttpFilter(EloiActionFilter.java:111)
at com.an.eloi.common.EloiActionFilter.doHttpFilterSynchronizedBySession(EloiActionFilter.java:159)
at com.an.eloi.common.EloiActionFilter.doFilter(EloiActionFilter.java:168)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at com.an.fwk.core.web.filter.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:84)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:999)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:565)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:309)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
显然,Hibernate 无法连接 OrganeSaisiMission 和其他表。怎么解决?
编辑:这里有 3 个可能很重要的 Hibernate 映射文件
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="com.an.eloi.model.domaine.missionPlf.MissionPlf" table="mission_plf">
<id name="id" type="java.lang.Long">
<column name="MISSION_PLF_ID" />
<generator class="identity" />
</id>
<many-to-one name="divisionDeLoi" class="com.an.eloi.model.domaine.divisionDeLoi.DivisionDeLoi" fetch="select">
<column name="DIVISIONDELOI_ID" not-null="true" />
</many-to-one>
<property name="missionPlfLibdef" type="java.lang.String">
<column name="MISSION_PLF_INTITULE" length="1024" />
</property>
<property name="missionPlfEtat" type="java.lang.String">
<column name="MISSION_PLF_ETAT" length="1024" />
</property>
<property name="missionPlfIntituleEtat" type="java.lang.String">
<column name="MISSION_PLF_INTITULE_ETAT" length="1024" />
</property>
<property name="missionPlfOrdreEtat" type="java.lang.Integer">
<column name="MISSION_PLF_ORDRE_ETAT" length="10" />
</property>
<property name="missionPlfCode" type="java.lang.String">
<column name="MISSION_PLF_CODE" length="1024" />
</property>
<property name="missionPlfOrdre" type="java.lang.Integer">
<column name="MISSION_PLF_ORDRE" length="10" />
</property>
<property name="missionPlfLigne" type="java.lang.String">
<column name="MISSION_PLF_LIGNE" length="1024" />
</property>
<property name="missionPlfIntituleTableau" type="java.lang.String">
<column name="MISSION_PLF_INTITULE_TABLEAU" length="1024" />
</property>
<property name="missionPlfOrdreTableau" type="java.lang.Integer">
<column name="MISSION_PLF_ORDRE_TABLEAU" length="10" />
</property>
<set name="amendements" inverse="true">
<key>
<column name="MISSION_ID" />
</key>
<one-to-many class="com.an.eloi.model.domaine.amendement.Amendement" />
</set>
<set name="programmePlfs" inverse="true">
<key>
<column name="MISSION_PLF_ID" not-null="true" />
</key>
<one-to-many class="com.an.eloi.model.domaine.programmePlf.ProgrammePlf" />
</set>
<set name="organesaisimissions" table="organe_saisi_mission" inverse="true" cascade="save-update" lazy="true" fetch="select">
<key>
<column name="MISSION_PLF_ID" not-null="true" />
</key>
<one-to-many class="com.an.eloi.model.domaine.organesaisimission.OrganeSaisiMission" />
</set>
</class>
</hibernate-mapping>
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="com.an.eloi.model.domaine.organesaisi.OrganeSaisi" table="organe_saisi">
<id name="id" type="java.lang.Long">
<column name="ORGANE_SAISI_ID" />
<generator class="identity" />
</id>
<many-to-one name="organe" class="com.an.eloi.model.domaine.organe.Organe" fetch="select">
<column name="ORGANE_ID" not-null="true" />
</many-to-one>
<many-to-one name="texteDeLoi" class="com.an.eloi.model.domaine.texteDeLoi.TexteDeLoi" fetch="select">
<column name="TEXTEDELOI_ID" not-null="true" />
</many-to-one>
<property name="organeSaisiTypeDeSaisie" type="java.lang.String">
<column name="ORGANE_SAISI_TYPE_DE_SAISIE" length="100" />
</property>
<property name="organeSaisiLegisId" type="java.lang.String">
<column name="ORGANE_SAISI_LEGIS_ID" not-null="false"/>
</property>
<property name="saisieDebut" type="java.util.Date">
<column name="SAISIE_DEBUT" not-null="false"/>
</property>
<property name="saisieFin" type="java.util.Date">
<column name="SAISIE_FIN" not-null="false"/>
</property>
<set name="organesaisimissions" table="organe_saisi_mission" inverse="true" cascade="save-update" lazy="true" fetch="select">
<key>
<column name="ORGANE_SAISI_ID" not-null="true" />
</key>
<one-to-many class="com.an.eloi.model.domaine.organesaisimission.OrganeSaisiMission" />
</set>
</class>
</hibernate-mapping>
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.an.eloi.model.domaine.organesaisimission.OrganeSaisiMission" table="organe_saisi_mission">
<id name="id" type="java.lang.Long">
<column name="ORGANE_SAISI_MISSION_ID" />
<generator class="identity" />
</id>
<many-to-one name="organeSaisi" class="com.an.eloi.model.domaine.organesaisi.OrganeSaisi" fetch="select">
<column name="ORGANE_SAISI_ID" not-null="true" />
</many-to-one>
<many-to-one name="missionPlf" class="com.an.eloi.model.domaine.missionPlf.MissionPlf" fetch="select">
<column name="MISSION_PLF_ID" not-null="true" />
</many-to-one>
<property name="missionOrdre" type="java.lang.Integer">
<column name="MISSION_ORDRE" />
</property>
<property name="delaiDepotMission" type="java.util.Date">
<column name="DELAI_DEPOT_MISSION" length="10" />
</property>
<property name="diffusion" type="java.lang.Byte">
<column name="DIFFUSION" not-null="true" />
</property>
</class>
</hibernate-mapping>
在第2个中,我加了organesaisimissions Set,没有用。无论有没有它们,我都会遇到同样的错误。
【问题讨论】:
-
要重现您的问题,我们应该知道您的实体映射的相关部分。
-
将所有连接更改为显式连接
-
@Conrad 我不是所有的加入都是明确的吗?
-
@SternK 我编辑了我的问题以添加映射的实体。
-
@AlexisDufrenoy 我在提供的实体中看不到
com.an.eloi.model.domaine.amendement.Amendement实体。您能否也将您的查询简化到重现您的问题的最低限度。如果您知道order by部分和getTriBibard函数使用与问题无关,只需将其删除。