2014-10-29 46 views
0

我们有两个JPA实体BloodDonorLastDonation双向链接。 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 

有什么不对的第一个查询,什么可以做梳理出来?

回答

1

更改is emptyis null,在我的项目中工作。

is empty应该@<n>ToManyis null用于@<n>ToOne关系,但我希望在误操作的情况下,从JPA提供商的异常,而不是一个查询,“作品”,但是没有得到预期的效果。

+0

如果将'e.lastDonation.lastDonationDate <:fourMonthsAgo'更改为'l.lastDonationDate <:fourMonthsAgo',则无论是否为空或是否为空,查询都可以使用。 – 2014-10-29 14:59:25

+0

奇怪的是,在我的项目中,当我使用等效查询时,像'l是空的或l.something = 3',它不起作用。仅适用于'l is null'。我正在使用Hibernate 4.3.5 – 2014-10-29 15:10:41

+0

我正在使用Hibernate 4.3.6。该项目[这里](https://bitbucket.org/infovillavendor/blooddonation)。不是我的项目,而是一个由新手指导的项目。 – 2014-10-29 15:16:35