2009-06-06 7 views
1

J'essaie d'obtenir une architecture Tag Cloud fonctionnant dans NHibernate.Nhibernate Tag Cloud

public class Tag : Entity 
{ 
    public virtual int Id { get; set; } 
    public virtual string Text { get; set; } 
} 

Ce tableau la carte à quelques entités dans mon schéma, donc je ne veux pas ajouter une collection à la classe Tag pour chaque association. Je souhaite toutefois interroger les entités de balise et renvoyer le nombre (*) dans toutes les tables jointes. Je pourrais le faire facilement en SQL mais je ne vois pas encore la lumière avec NH.

Commencé à écrire quelques HQL.

select t.Text, count(t.Id) 
from Tag t join ???? 
where t.Id= :tagid 
    group by t.Text 

Que dois-je joindre? Puisque dans le modèle d'objet la table de pont de many-to-many n'a aucune classe et aucune propriété, cela signifie-t-il que ceci ne peut pas fonctionner?

Que suggéreriez-vous? Id être intéressé de voir si cela pourrait être fait dans les critères.

Merci beaucoup,

Ian

+0

Je me demandais simplement: est-ce qu'il est logique qu'une étiquette soit une entité? N'est-ce pas vraiment un objet de valeur? Je veux dire deux étiquettes avec exactement le même nom, mais des ID différents n'auraient aucun sens. – UpTheCreek

Répondre

1

Que diriez-vous cela comme un début avec l'utilisation de critères, je l'ai pas courir et je ne sais pas comment faire la jonction ...

IList multiResults = s.CreateMultiCriteria() 
    .Add(s.CreateCriteria(typeof(Tag)).SetProjection(Projections.RowCount())) 
    .List(); 
+2

C'est assez frustrant quand le sql est si simple. Par exemple si j'ai une balise et une entité jointes par une table entity_tag. Tout ce que je besoin pour un nombre de balises est Sélectionnez t.Text, count (*) De Tag t Rejoignez Entity_Tags et sur et.TagId = t.Id Groupe par t.text Je ne suis pas sûr Je peux obtenir quelque chose de si concis sur NH. Je ne veux vraiment pas polluer ma classe de modèles de balises avec des collections juste pour que NH fonctionne. – madcapnmckay