У меня нет проблем с написанием sql для следующей проблемы. Тем не менее, я хотел бы написать это как HQL или ICriteria. Я использую свободный nhibernate и последний nhibernate. Ситуация:
Есть 6 классов A B C D AC AD. B наследуется от A. AC представляет отношение m: m между A и C, а AD представляет отношение m: m между A и D. Предположим, что все классы имеют столбец ID. Я хотел бы посчитать количество Cs и Ds B, связанных с.
Не существует IList, например, Cs в A (и B в этом отношении). Тем не менее классы связаны ...
Вот код (упрощенно):
public class A : Entity
{
}
public class B : A
{
}
public class C : Entity
{
}
public class D : Entity
{
}
public class AC : Entity
{
public virtual A A { get; set; }
public virtual C C { get; set; }
}
public class AD : Entity
{
public virtual A A { get; set; }
public virtual D D { get; set; }
}
Возможно ли в моем конкретном случае использовать HQL и «левое соединение» (чтобы также показать B с нулевыми C и D)?
Спасибо.
Christian
PS:
Я немного играл с тета-стилями, но не получил ожидаемых результатов, и я не думаю, что здесь возможны "левые", не так ли?
PPS:
Этот вид объединения в тета-стиле работает, но только если B ассоциируется как минимум с 1 C и D:
select
B.Id,
count(distinct AC.C.Id),
count(distinct AD.D.Id)
from AC AC, AD AD, B B
where AC.A.Id = B.Id and AD.A.Id = B.Id
group by B.Id