2009-11-11 4 views
0

J'ai essayé de trouver un moyen de faire cette requête en utilisant un critère NHibernate (préféré) ou HQL, sans chance.Multi table COUNT dans NHibernate avec sous-classes jointes

Voici la requête:

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 

Notes:

  1. SpecialSource est la sous-classe de la source et est mise en correspondance comme JoinedSubClass
  2. SpecialArticle est une sous-classe de l'article et est mis en correspondance en tant que JoinedSubClass

Voici le code de classe 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 
} 

Et le but est essentiellement de compter le nombre SpecialArticles pour un compte.

Toute aide est appréciée!

+0

Pouvez-vous fournir votre modèle d'objets? –

Répondre

1

Si l'objectif est de compter le nombre de SpecialArticles pour une donnée Account vous pouvez essayer cette requête:

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>(); 
Questions connexes