我正在尝试编写一个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)相同的结果。
答案 0 :(得分:1)
尝试在第一个条件的完整查询中加入实体:
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
自动限制结果。