Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.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 JPA Hibernate加入。。。在…上和_Java_Sql_Hibernate_Jpa_Hql - Fatal编程技术网

Java JPA Hibernate加入。。。在…上和

Java JPA Hibernate加入。。。在…上和,java,sql,hibernate,jpa,hql,Java,Sql,Hibernate,Jpa,Hql,我使用以下查询: SELECT * FROM phaseinproject as pip JOIN projectinrelease pir ON pip.projectInRelease_id = pir.id JOIN releaseperiod as rp ON pir.release_id = rp.id JOIN releasestructure as rs ON rs.id = rp.releaseStructure_id JOIN phaseinreleasestructure

我使用以下查询:

SELECT * FROM phaseinproject as pip JOIN projectinrelease pir 
ON pip.projectInRelease_id = pir.id
JOIN releaseperiod as rp ON pir.release_id = rp.id
JOIN releasestructure as rs ON rs.id = rp.releaseStructure_id
JOIN phaseinreleasestructure as pirs ON pirs.releaseStructure_id = rs.id
JOIN releasephase as rlp ON rlp.id = pirs.phase_id 
AND rlp.id = pip.phase_id 
这个查询非常有效。我得到了三个我期望的结果

我将此查询转换为以下HQL查询:

            TypedQuery<PhaseInProjectOverview> findPhasesInRelease = em.createQuery("SELECT NEW nl.dashboard.dto.out.PhaseInProjectOverview(phaseInProject.id, phase.name, phaseInProject.startDate, phaseInProject.plannedEndDate, phaseInProject.endDate) FROM PhaseInProject phaseInProject "
                + "JOIN phaseInProject.projectInRelease projectInRelease "
                + "JOIN projectInRelease.release release "
                + "JOIN release.releaseStructure releaseStructure "
                + "JOIN releaseStructure.phaseInReleaseStructures phaseInReleaseStructure "
                + "JOIN phaseInReleaseStructure.phase phase "
                + "WHERE release.id = :releaseId ORDER BY phaseInReleaseStructure.position, phaseInProject.startDate", PhaseInProjectOverview.class);
        findPhasesInRelease.setParameter("releaseId", releaseId);
        return findPhasesInRelease.getResultList();
无论我尝试什么:我得到6个结果,因为HQL似乎不支持连接。。。在…上和sql语法

有人知道如何解决这个问题吗

编辑: 我把我自己的答案和用过的答案加在一起。谢谢大家的回答/提示。

请尝试with关键字:phaseInReaseStructure.phase phase with phase.id=phaseInProject.phase\u id-这将导致类似SQL的releasephase,如rlp ON rlp.id=pirs.phase\u id和rlp.id=pip.phase\u id

或者,只需在where子句中添加该条件:

... WHERE release.id = :releaseId AND phase.id = phaseInProject.phase_id ... 

我用一个额外的WHERE条款解决了我的问题:

phase.id = phaseInProject.phase.id
现在我得到了我期待的结果。 “WITH”关键字似乎不适用于多个实体。当我尝试时,我得到一个例外:

HQL error: with-clause referenced two different from-clause elements
尝试使用“ON”语法(如JOIN phaseInReleaseStructure.phase phase ON phase.id=phaseInProject.id)时,我遇到另一个错误:

unexpected token: ON near line 1, column 473

HQL是否支持旧的联接语法?选择从表1,表2。。。其中…JPQL在连接中有一个ON关键字,您没有使用它。您也没有说明此JPQL查询生成的SQL是什么。它似乎不适用于多个实体。当我尝试使用它时,我得到以下错误:HQL错误:with子句引用了两个不同的from子句elements@Sverro2哦,对了,这个限制似乎仍然存在,不幸的是,忘记了。因此,您必须使用where路由或子选择。欲了解更多信息,请参阅此处:-我希望这将在将来得到解决。