2009-11-11 32 views
0

我一直在试图找到一种方法来使用NHibernate标准(首选)或HQL来做这个查询,没有运气。NHibernate中的多表COUNT与加入的子类

下面是该查询:

select COUNT(sa.Id) from Accounts a 
join Sources s on a.Id = s.Account_Id 
join SpecialArticles sa on sa.SpecialSource_Id = s.Id 

注:

  1. SpecialSource是源的子类,被映射为一个JoinedSubClass
  2. SpecialArticle是文章的子类,被映射为一个JoinedSubClass

这里是类模型psudo-code:

class Account 
{ 
    Guid _id; 
} 

class Source 
{ 
    Guid _id; 
    Account _account; 
} 

class Article 
{ 
    Guid _id; 
    Source _source; 
} 

class SpecialSource : Source 
{ 
    Guid _id; 
    // ... subclass specific fields 
} 

class SpecialArticle : Article 
{ 
    Guid _id; 
    // ... subclass specific fields 
} 

而目的基本上是要计算一个帐户的特殊文章数。

任何帮助表示赞赏!

+0

你能提供你的对象模型? – 2009-11-11 11:14:56

回答

1

如果目的是计算SpecialArticles数量对于一个给定Account您可以尝试此查询:

int count = session 
    .CreateCriteria<SpecialArticle>() 
    .CreateAlias("Source", "source") 
    .CreateAlias("source.Account", "account") 
    .Add(Expression.Eq("account.Id", accountId)) 
    .SetProjection(Projections.Count(Projections.Id())) 
    .UniqueResult<int>();