JPQL,OR只返回一个条件的结果?

时间:2014-03-14 09:18:47

标签: jpa jpql

我正在尝试编写一个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)相同的结果。

1 个答案:

答案 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自动限制结果。