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路由或子选择。欲了解更多信息,请参阅此处:-我希望这将在将来得到解决。