Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.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

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
Java 奇怪的JPQL问题:添加限制较少的查询参数会返回较少的行_Java_Jpa_Jpql - Fatal编程技术网

Java 奇怪的JPQL问题:添加限制较少的查询参数会返回较少的行

Java 奇怪的JPQL问题:添加限制较少的查询参数会返回较少的行,java,jpa,jpql,Java,Jpa,Jpql,我们有这样一个实体模型(为了简洁起见,省略了不相关的字段): 因此,基本上,我们将把发票分成几个部分,并将关系存储在实体中 以下查询工作并按payerId返回所有发票: SELECT i FROM Invoice i WHERE i.payer.id = :payerId 但是,当我扩展查询以同时列出付款人可能拥有的所有“子”发票(从其他付款人开具的发票)时,我没有得到任何结果,也没有任何错误或警告 SELECT i FROM Invoice i WHERE i.payer.id = :pay

我们有这样一个实体模型(为了简洁起见,省略了不相关的字段):

因此,基本上,我们将把发票分成几个部分,并将关系存储在实体中

以下查询工作并按payerId返回所有发票:

SELECT i FROM Invoice i WHERE i.payer.id = :payerId
但是,当我扩展查询以同时列出付款人可能拥有的所有“子”发票(从其他付款人开具的发票)时,我没有得到任何结果,也没有任何错误或警告

SELECT i FROM Invoice i WHERE i.payer.id = :payerId OR
    (i.parentInvoice IS NOT NULL AND i.parentInvoice.payer.id = :payerId)
这里可能有什么问题

i.parentInvoice.payer.id
这是一个从发票到其父发票到付款人的内部联接,它将过滤没有父发票或付款人的所有行

您需要改用外部联接

SELECT i FROM Invoice i join i.parentInvoice parent join p.payer parentPayer join i.payer payer WHERE payer.id = :payerId OR (parentPayer.id = :payerId)

为什么不看看生成的SQL呢?很好。下一步我会检查的。接得好。我会尽快试试这个。谢谢,还是不走运。。没有结果。我的@OneToOne注释有什么问题吗?
SELECT i FROM Invoice i join i.parentInvoice parent join p.payer parentPayer join i.payer payer WHERE payer.id = :payerId OR (parentPayer.id = :payerId)