【发布时间】:2015-07-31 09:01:26
【问题描述】:
我使用以下查询:
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 语法。
有人知道如何解决这个问题吗?
编辑: 我用使用过的解决方案添加了我自己的答案。谢谢大家的回答/指点。
【问题讨论】:
-
HQL 是否支持旧的连接语法? (选择...从tab1,tab2 ...其中...)
-
JPQL 在您没有使用的 JOIN 中有一个“ON”关键字。您也没有说明此 JPQL 查询生成的 SQL 是什么。
标签: java sql hibernate jpa hql