Оставьте Присоединиться в NHibernate HQL - PullRequest
0 голосов
/ 04 мая 2009

Можно ли выполнить левое соединение между двумя таблицами, которые не связаны друг с другом через отношения родитель-потомок или многие-ко-многим? Все образцы, которые я нашел вокруг, показывают только эти сценарии.

У меня есть следующие таблицы,

Синхронизация -> Id (строка) -> EntityId (строка) -> OtherInfo

Клиент -> Id -> OtherInfo

Проект -> Id -> OtherInfo

Синхронизация - это общая таблица для хранения метаданных об остальных таблицах. EntityId представляет поле «Id» в этих таблицах (между синхронизацией и остальными таблицами не создано физического внешнего ключа).

Я в основном хочу выполнить следующий запрос в SQL,

выберите с. , е. из синхронизации слева присоединяется сущность e на s.entityid = e.id /

(сущность в sql выше должна быть заменена реальной таблицей, клиентом, проектом или любой другой таблицей, которая содержит некоторые данные в таблице синхронизации).

Может ли кто-нибудь дать мне некоторую помощь или руководство о том, как этот запрос должен быть выражен в HQL?

Спасибо Пабло.

Ответы [ 2 ]

3 голосов
/ 04 мая 2009

Насколько мне известно, вы не можете сделать это напрямую. HQL является объектно-ориентированным и знает только о сущностях и отношениях, которые были отображены. Возможно, вам удастся заставить это работать, выполнив session.CreateSQLQuery и используя .AddEntity, чтобы NHibernate создал сущность, полученную из результатов запроса SQL.

1 голос
/ 04 мая 2009

Это не левое объединение, я знаю, но оно может дать некоторые подсказки:

http://jaychapman.blogspot.com/2007/10/nhibernate-non-mapped-joins.html

Это давняя проблема, связанная с несопоставленным левым соединением в NH, и помнить, что есть обходные пути для обходных путей. Посмотрите здесь на вопрос и первую пару комментариев здесь: https://nhibernate.jira.com/browse/NH-514

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...