簡體   English   中英

JPA Hibernate加入…開…並且

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM