Java 奇怪的JPQL问题:添加限制较少的查询参数会返回较少的行
我们有这样一个实体模型(为了简洁起见,省略了不相关的字段): 因此,基本上,我们将把发票分成几个部分,并将关系存储在实体中 以下查询工作并按payerId返回所有发票: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
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)