Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jpa JPQL,还是只返回一个条件的结果?_Jpa_Jpql - Fatal编程技术网

Jpa JPQL,还是只返回一个条件的结果?

Jpa JPQL,还是只返回一个条件的结果?,jpa,jpql,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

我正在尝试编写一个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)))
和其他的:

(一)

(二)


完整表达式返回与表达式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)))

为什么这样做:如果不显式地离开连接,我想它会生成一个
内部连接
,它会自动限制结果。

完全符合您的要求:第一个条件(ID在那些蛋白质中.a2),或者第二个条件,或者两者都有。那么为什么在完整查询中,它不只返回那些符合条件1)的文章2)呢?是的,谢谢。这起作用了。现在我只需要弄清楚它为什么起作用。:)好吧,如果不显式地离开连接,我想它会生成一个
内部连接
,这不是您想要的。
SELECT a FROM Article a WHERE a.ag.proteinPID.uniprot.AC LIKE :genProt
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)))