摘要在Hibernate HQL中,當多個子類有一個屬性名稱相同的屬性時,如何讓連接獲取子類的鏈接實體?
在Hibernate中,我試圖LEFT JOIN從一個主類,其中多個子類具有相同名稱的屬性的子類取得屬性。然而,Hibernate只提取第一個子類的鏈接實體,而不是其他實體。
背景
我造型基因組特徵(基因,轉錄和外顯子),並在基於Hibernate的系統的遺傳變異。基因,轉錄本和外顯子都是GenomicFeature的子類,Variants可以具有零到多個GenomicFeatures。反過來,基因也具有零對多的轉錄本 - 外顯子 - 以及轉錄本具有零對多的基因和外顯子。這些關係中的每一個都是懶散地取得的。但有時候,我想獲取變體及其所有基因組特徵,以及從直接基因組特徵鏈接的所有基因組特徵。例如,我想獲取特定的變體,與變體相關的基因/轉錄本/外顯子,基因的所有轉錄本,轉錄本的所有基因外顯子以及外顯子的所有轉錄本。
問題
當我在上面做一個查詢,它的工作原理不同之處在於對基因轉錄並不牽強,只是外顯子的轉錄牽強。我認爲這是因爲屬性 - gene.transcripts和exon.transcripts - 共享同一個名稱。
我已經試過
主查詢,在PagingAndSortingRepository,低於
@Query("SELECT v FROM Variant v"
+ " LEFT JOIN FETCH v.variantGenomicFeatures AS vgf"
+ " LEFT JOIN FETCH vgf.genomicFeature AS gf LEFT JOIN FETCH gf.genes LEFT JOIN FETCH gf.exons LEFT JOIN FETCH gf.transcripts"
+ " WHERE"
+ " v.id = (:id)")
public Variant findOneByIdAndGenomicFeaturesEagerly(@Param("id") Integer id);
我已經試過加入genomicFeature兩次,一次用於基因和一次成績單&外顯子,但這不起作用。
我試過只選擇基因(WHERE TYPE(gf) = Gene
),但看着它生成的查詢,它仍然只加入外顯子的轉錄本,然後返回基因。
嘗試在兩個步驟中完成它... – aurelius
您嘗試使用'JOIN FETCH'而不是'LEFT JOIN FETCH'嗎? – Syl