Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java HQL错误:子句引用了两个不同于子句的元素_Java_Hibernate_Jpa_Orm_Hql - Fatal编程技术网

Java HQL错误:子句引用了两个不同于子句的元素

Java HQL错误:子句引用了两个不同于子句的元素,java,hibernate,jpa,orm,hql,Java,Hibernate,Jpa,Orm,Hql,我正在开始使用Hibernate,我正在使用HQL,使用一些连接从数据库中检索数据,但是如果遇到此错误,请提供有关如何解决此问题的任何帮助 Field.hbm.xml文件: <id name="id" type="string"> <column name="field_map_cd" /> <generator class="assigned"></generator> </id>

我正在开始使用Hibernate,我正在使用HQL,使用一些连接从数据库中检索数据,但是如果遇到此错误,请提供有关如何解决此问题的任何帮助

Field.hbm.xml文件:

    <id name="id" type="string">
        <column name="field_map_cd" />
        <generator class="assigned"></generator>
    </id>
    <many-to-one name="src_field_map" column="field_map_cd" not-null="true" insert="false" update="false"/>
    <many-to-one name="tgt_field_map" column="field_map_cd" not-null="true" insert="false" update="false"/>
堆栈跟踪:

ERROR:  with-clause referenced two different from-clause elements
with-clause referenced two different from-clause elements
at org.hibernate.hql.internal.ast.HqlSqlWalker.handleWithFragment(HqlSqlWalker.java:465)
at org.hibernate.hql.internal.ast.HqlSqlWalker.createFromJoinElement(HqlSqlWalker.java:413)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.joinElement(HqlSqlBaseWalker.java:3858)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElement(HqlSqlBaseWalker.java:3644)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElementList(HqlSqlBaseWalker.java:3522)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromClause(HqlSqlBaseWalker.java:706)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:562)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:299)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:247)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:278)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:206)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:158)
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:126)
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:88)
at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:190)
at org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:301)
at org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:236)
at org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:1800)
at Utilities.test.readXrefRule(test.java:67)
at Utilities.test.main(test.java:171)
org.hibernate.hql.internal.ast.QuerySyntaxException: with-clause referenced 
two different from-clause elements [select t.id, t.name, t.src_field_map.id,
s1.field_map_nm as src_field_map_nm,t.tgt_field_map.id, s2.field_map_nm
as tgt_field_map_nm, orm.entity.OS_Rule as t left join t.src_field_map
as s1 left join t.tgt_field_map as s2 with (s1.id = t.src_field_map.id 
and s2.id = t.tgt_field_map.id )]
at org.hibernate.hql.internal.ast.QuerySyntaxException.convert(QuerySyntaxException.java:91)
at org.hibernate.hql.internal.ast.ErrorCounter.throwQueryException(ErrorCounter.java:109)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:284)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:206)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:158)
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:126)
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:88)
at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:190)
at org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:301)
at org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:236)
at org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:1800)
at Utilities.test.readRule(test.java:67)
at Utilities.test.main(test.java:171)
错误:子句引用了两个不同于子句的元素
with子句引用了两个不同于子句的元素
位于org.hibernate.hql.internal.ast.hqlslwalker.handleWithFragment(hqlslwalker.java:465)
位于org.hibernate.hql.internal.ast.HqlSqlWalker.createFromJoinElement(HqlSqlWalker.java:413)
位于org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.joinElement(HqlSqlBaseWalker.java:3858)
位于org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElement(HqlSqlBaseWalker.java:3644)
位于org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElementList(HqlSqlBaseWalker.java:3522)
位于org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromClause(HqlSqlBaseWalker.java:706)
位于org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:562)
位于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:278)
位于org.hibernate.hql.internal.ast.QueryTranslatorImpl.docomFile(QueryTranslatorImpl.java:206)
位于org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:158)
在org.hibernate.engine.query.spi.HQLQueryPlan.(HQLQueryPlan.java:126)
在org.hibernate.engine.query.spi.HQLQueryPlan.(HQLQueryPlan.java:88)
位于org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:190)
位于org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:301)
位于org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:236)
位于org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:1800)
在Utilities.test.readXrefRule(test.java:67)
位于Utilities.test.main(test.java:171)
org.hibernate.hql.internal.ast.QuerySyntaxException:引用了子句
两个不同的from子句元素[选择t.id、t.name、t.src\u field\u map.id、,
s1.field\u map\u nm作为src\u field\u map\u nm,t.tgt\u field\u map.id,s2.field\u map\u nm
作为tgt\u field\u map\u nm,orm.entity.OS\u规则作为t left join t.src\u field\u map
as s1左将t.tgt_字段_映射与s2连接(s1.id=t.src_字段_映射.id
和s2.id=t.tgt_field_map.id)]
位于org.hibernate.hql.internal.ast.QuerySyntaxException.convert(QuerySyntaxException.java:91)
位于org.hibernate.hql.internal.ast.ErrorCounter.throwQueryException(ErrorCounter.java:109)
位于org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:284)
位于org.hibernate.hql.internal.ast.QueryTranslatorImpl.docomFile(QueryTranslatorImpl.java:206)
位于org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:158)
在org.hibernate.engine.query.spi.HQLQueryPlan.(HQLQueryPlan.java:126)
在org.hibernate.engine.query.spi.HQLQueryPlan.(HQLQueryPlan.java:88)
位于org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:190)
位于org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:301)
位于org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:236)
位于org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:1800)
在Utilities.test.readRule(test.java:67)
位于Utilities.test.main(test.java:171)
试试这个:

select 
    t.id, 
    t.name, 
    s1.id, 
    s1.field_map_nm as src_field_map_nm, 
    s2.id,
    s2.field_map_nm as tgt_field_map_nm
from Rule as t 
left join t.src_field_map as s1 
left join t.tgt_field_map as s2
我认为您不需要
with
子句,因为您只使用FK,这是隐式的

您的
with
子句实际上引用了同一个表id两次:

s1.id = t.src_field_map.id
因为
s1=t.src\u字段\u映射

因此,您的with子句翻译为:

t.src_field_map.id = t.src_field_map.id

因此,您只需删除
with
子句。

遵循您的建议,并使用正确的字段修复了Rule.hbm.xml文件中的成对多对一列属性值,工作起来非常有趣。
t.src_field_map.id = t.src_field_map.id