0
我们有两个JPA实体BloodDonor
和LastDonation
双向链接。 LastDonation
拥有外键。 BloodDonor
包含以下JPQL查询。JPQL左连接查询与OR不会产生预期结果(OR的一侧不起作用)
SELECT e FROM BloodDonor e
LEFT JOIN e.lastDonation l
WHERE e.name LIKE :name AND
(l IS EMPTY OR e.lastDonation.lastDonationDate < :fourMonthsAgo)
ORDER BY e.createDate DESC
运行此查询产生的结果与构建的没有l IS EMPTY
的查询结果相同。它不包括BloodDonor
s,其lastDonation
尚未设置。
以下查询按预期工作。
SELECT e FROM BloodDonor e
WHERE e.name LIKE :name AND
e.lastDonation IS EMPTY
ORDER BY e.createDate DESC
有什么不对的第一个查询,什么可以做梳理出来?
如果将'e.lastDonation.lastDonationDate <:fourMonthsAgo'更改为'l.lastDonationDate <:fourMonthsAgo',则无论是否为空或是否为空,查询都可以使用。 – 2014-10-29 14:59:25
奇怪的是,在我的项目中,当我使用等效查询时,像'l是空的或l.something = 3',它不起作用。仅适用于'l is null'。我正在使用Hibernate 4.3.5 – 2014-10-29 15:10:41
我正在使用Hibernate 4.3.6。该项目[这里](https://bitbucket.org/infovillavendor/blooddonation)。不是我的项目,而是一个由新手指导的项目。 – 2014-10-29 15:16:35