2009-05-04 2 views
0

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

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

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

Заказчик -> Id -> OtherInfo

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

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

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

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

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

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

Thanks Pablo.

ответ

3

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

+0

его довольно глупый, но почти все левые соединения лучше сделаны таким образом. – DevelopingChris

1

Это не LEFT JOIN я знаю, но это может дать некоторые указатели:

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

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