0

У меня есть объект график, который выглядит следующим образом:Multi-таблица NHibernate запрос

class A() 
{ 
    int id; 
    IEnumerable<B> bees; 
} 

class B() 
{ 
    int id; 
    A a; 
    C c; 
} 

class C() 
{ 
    int id; 
    D d; 
    IEnumerable<B> bees; 
} 

class D() 
{ 
    int id; 
    IEnumerable<C> cees 
} 

Что бы разумный подход для построения запроса, который:

возвращает список из типов, где они содержат D по цепочке с определенным идентификатором?

Я использую NH3, поэтому могу использовать любой из техников запроса. Я пробовал несколько разных подходов, но в каждом случае попал, казалось бы, в тупики. У меня есть решение, работающее с коллекциями памяти, но, очевидно, это не идеально, я хочу, чтобы работа была выполнена на сервере БД.

ответ

3
select distinct a from A a 
inner join a.bees b 
inner join b.c c 
where c.d.id = :theSearchDId 

То есть в предположении, что все ассоциации двунаправленные ассоциации, а не неродственные ассоциации (т.е. A.bees обратная ассоциация B.a и т.д.).

+0

Ничего себе, это было просто. Не совсем уверен, в какую путаную дорогу я направился. Вы бы не узнали, есть ли простой способ вернуть счет b (или c's - тот же номер), который свяжет их, не так ли? – UpTheCreek

+0

Если вы имеете в виду глобальное число, то используйте select count (different b.id) из A a inner join a.bees b inner join b.c c где c.d.id =: theSearchDId. Если вы имеете в виду количество b на a, тогда используйте select a.id, count (distinct b.id) из A внутреннее соединение a.bees b внутреннее соединение bc c, где cdid =: theSearchDId group by a.id –

+0

блестящий - благодаря – UpTheCreek

Смежные вопросы