HQL Ошибка и пустые поля - PullRequest
       28

HQL Ошибка и пустые поля

0 голосов
/ 19 августа 2009

Почему этот запрос НЕ работает

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, поэтому остальная часть предложения не выполняется. Но по какой-то причине, когда я запускаю первый запрос, я не получаю никаких результатов, но если я запускаю второй (МНОГО МЕНЬШЕ ЭФФЕКТИВНОГО), я получаю все ожидаемые результаты. Это ошибка в HQL Hibernate или я схожу с ума?

1 Ответ

1 голос
/ 20 августа 2009

Вы пробовали что-то вроде этого:

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)) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...