NHibernate HQL Query с левым внешним соединением - PullRequest
0 голосов
/ 28 июля 2011

Я хотел бы получить некоторые данные из 2 разных таблиц. Их называют «А» и «В». Существует также еще одна таблица под названием «C».

И A, и B имеют ссылку на «C», но «C» НЕ имеет ссылки ни на A, ни на B.

Моя команда SQL будет выглядеть примерно так:

select 
    A.x,
    A.y,
    B.z 
from 
    A
LEFT OUTER JOIN C ON C.i = A.i
LEFT OUTER JOIN B ON B.i = C.i

Дело в том, что у меня есть некоторые данные, которые мне нужны в таблице A, и некоторые данные в таблице B. Мне нужно извлечь все данные из таблицы A, где свойство из таблицы A равно свойству таблицы B, и, следовательно, некоторые данные из таблицы B. Это просто, действительно простая команда HQl (проще с LINQ):

select a.x, a.y, b.z
from A as a, B as b
where a.x = b.x

Но проблема в том, что мне также нужно получить данные из A, когда a.x имеет значение NULL. Я бы, конечно, получил нулевое значение от b.x

Я пытался использовать DefaultIfEmpty () в LINQ, но поскольку я использую session.Query () над сущностью, DefaultIfEmpty еще не реализован в NH 3.

Как мне написать это на HQL?

1 Ответ

1 голос
/ 29 июля 2011

Вы не можете использовать левые соединения в HQL для не отображенных отношений.

Вы можете просто использовать SQLQuery для этого.

...