2009-08-19 31 views
0

为什么这个查询不起作用HQL错误和可空领域

FROM WorkflowConfiguration 
WHERE ((saReplacement IS NOT NULL) AND (:currentTime >= saReplacement.start) AND (saReplacement.end >= :currentTime)) OR 
       ((hrmsAdminReplacement IS NOT NULL) AND (:currentTime >= hrmsAdminReplacement.start) AND (hrmsAdminReplacement.end >= :currentTime)) OR 
       ((hrManagerReplacement IS NOT NULL) AND (:currentTime >= hrManagerReplacement.start) AND (hrManagerReplacement.end >= :currentTime)) OR 
       ((payrollAdminReplacement IS NOT NULL) AND (:currentTime >= payrollAdminReplacement.start) AND (payrollAdminReplacement.end >= :currentTime)) 

但是这一次确实

FROM WorkflowConfiguration 
WHERE (saReplacement IN (from WorkflowReplacement as replacement WHERE (:currentTime >= replacement.start) AND (replacement.end >= :currentTime))) OR 
       (hrmsAdminReplacement IN (from WorkflowReplacement as replacement WHERE (:currentTime >= replacement.start) AND (replacement.end >= :currentTime))) OR 
       (hrManagerReplacement IN (from WorkflowReplacement as replacement WHERE (:currentTime >= replacement.start) AND (replacement.end >= :currentTime))) OR 
       (payrollAdminReplacement IN (from WorkflowReplacement as replacement WHERE (:currentTime >= replacement.start) AND (replacement.end >= :currentTime))) 

之所以它这么久是saReplacement,hrmsAdminReplacement,hrManagerReplacement和payrollAdminReplacement都可以null,所以我放入一个检查来确保它们不是null,因此该子句的其余部分不会被执行。但由于某种原因,当我运行第一个查询时,我没有得到任何结果,但是如果我运行第二个查询(效率低得多),我会得到所有预期结果。这是Hibernate的HQL中的错误还是我失去了主意?

回答

1

你有没有尝试过这样的事情:

FROM WorkflowConfiguration wfc 
LEFT JOIN FETCH wft.saReplacement a 
LEFT JOIN FETCH wft.hrmsAdminReplacement b 
LEFT JOIN FETCH wft.hrManagerReplacement c 
LEFT JOIN FETCH wft.payrollAdminReplacement d 
WHERE 
((:currentTime >= a.start) AND (a.end >= :currentTime)) or 
((:currentTime >= b.start) AND (b.end >= :currentTime)) or 
((:currentTime >= c.start) AND (c.end >= :currentTime)) or 
((:currentTime >= d.start) AND (d.end >= :currentTime)) 
+0

嗯,我会尽力的明天!谢谢! – Zoidberg 2009-08-19 20:03:44

+0

更高效,更易于阅读,比我更好的查询,谢谢! – Zoidberg 2009-08-20 11:23:25