摘要
在Hibernate中,我试图从主类的子类LEFT JOIN FETCH属性,其中多个子类具有相同名称的属性.但是,Hibernate只获取第一个子类的链接实体,而不是其他实体.
背景
我正在基于Hibernate的系统中对基因组特征(基因,转录本和外显子)和遗传变异进行建模.基因,转录本和外显子都是GenomicFeature的子类,变体可以各自具有零对多基因组特征.反过来,基因具有零到多的转录本 - 外显子也是如此 - 而转录本具有零对多的基因和外显子.这些关系中的每一个都是懒洋洋地获取的.但有时,我想获取变体及其所有基因组特征,以及从直接基因组特征链接的所有基因组特征.例如,我想获取一个特定的变体,与变体相关的基因/转录物/外显子,基因的所有转录物,转录物的所有基因和外显子,以及外显子的所有转录物.
问题
当我对上述内容进行查询时,它的工作原理除了不提取基因的转录本,只提取外显子的转录本.我假设这是因为属性 - 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);
Run Code Online (Sandbox Code Playgroud)
我尝试过两次加入genomicFeature,一次用于基因,一次用于转录和外显,但这不起作用.
我只尝试选择Genes(WHERE TYPE(gf) = Gene),但查看它生成的查询,它仍然只加入Exon的Transcripts,然后返回Genes.
小智 0
我自己没有尝试,但也许在 fetch 子句上使用别名可以帮助 Hibernate 区分字段?
LEFT JOIN FETCH gf.genes as g
LEFT JOIN FETCH gf.exons as e
LEFT JOIN FETCH gf.transcripts as t
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
518 次 |
| 最近记录: |