我正在尝试编写一个JPQL查询,该查询应获得一个匹配至少两个条件之一的列表。当我分别构造查询时,它们将按预期工作,但是将它们放在一起的“ OR”将返回仅匹配条件之一的列表。我不明白为什么会这样。
这是完整的查询:
SELECT a FROM Article a WHERE ((a.ag.proteinPID.uniprot.AC LIKE :genProt)
OR (a.aid IN(SELECT a2.aid FROM Protein p JOIN p.articleList a2 WHERE p.uniprot.AC LIKE :genProt)))
和单独的:
1)
SELECT a FROM Article a WHERE a.aid IN(SELECT a2.aid FROM Protein p JOIN p.articleList a2 WHERE p.uniprot.AC LIKE :genProt)
2)
SELECT a FROM Article a WHERE a.ag.proteinPID.uniprot.AC LIKE :genProt
完整表达式返回与表达式2)相同的结果。
对于第一个条件,尝试在完整查询中左连接实体:
SELECT a FROM Article a LEFT JOIN a.ag g LEFT JOIN g.proteinPID p LEFT JOIN p.uniport u WHERE ((u.AC LIKE :genProt)
OR (a.aid IN(SELECT a2.aid FROM Protein p JOIN p.articleList a2 WHERE p.uniprot.AC LIKE :genProt)))
为何起作用:如果没有明确离开联接,我想它会INNER JOIN
自动限制结果。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句