[英]JPA Hibernate JOIN … ON … AND
我使用以下查询:
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似乎不支持"JOIN ... ON ... AND ..."
sql语法。
有谁知道如何解决这个问题?
编辑:我添加了自己的答案与使用的解决方案。 谢谢大家的答案/指标。
尝试使用with关键字: phaseInReleaseStructure.phase phase WITH phase.id = phaseInProject.phase_id
这会导致SQL像releasephase as rlp ON rlp.id = pirs.phase_id AND rlp.id = pip.phase_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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.