2009-06-06 7 views
1

Ich versuche, eine Tag Cloud-Architektur in NHibernate zu erhalten.Nhibernate Tag Cloud

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

Diese Tabelle wird auf ein paar Einheiten in meinem Schema zuordnen, so will ich nicht eine Sammlung an den Tag Klasse für jede Zuordnung hinzuzufügen.

Ich möchte jedoch die Tag-Entities abfragen und count (*) über alle verbundenen Tabellen zurückgeben. Ich könnte das leicht in SQL machen, aber ich sehe das Licht mit NH noch nicht.

Gestartet mit dem Schreiben einiger HQL.

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

Womit schließe ich mich an? Da die Viele-zu-Viele-Bridge-Tabelle im Objektmodell keine Klasse und keine Eigenschaft hat, bedeutet das, dass dies nicht funktionieren kann?

Was würden Sie vorschlagen? Es wäre interessant zu sehen, ob dies in Criteria gemacht werden könnte.

Vielen Dank,

Ian

+0

Ich frage mich nur - macht es Sinn, dass ein Tag eine Einheit ist? Ist es nicht wirklich ein Wertobjekt? Ich meine vermutlich zwei Tags mit exakt demselben Namen, aber unterschiedliche Ids wären bedeutungslos. – UpTheCreek

Antwort

1

Wie wäre es damit als Start mit Kriterien, ich habe es nicht ausführen, und ich weiß nicht, wie die Verbindung zu tun ...

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

Es ist ziemlich frustrierend, wenn der Sql so einfach ist. Zum Beispiel, wenn Tag und Entity durch die Tabelle entity_tag verbunden sind. Alles, was ich für eine Anzahl von Tags müssen, ist Select t.Text, count (*) Von Tag t Entity_Tags et Registriert auf et.TagId = t.Id Gruppe von t.text Ich bin nicht sicher Ich kann etwas so prägnantes aus NH bekommen. Ich möchte meine Tag-Modell-Klasse nicht mit Sammlungen verschmutzen, nur um NH zum Arbeiten zu bringen. – madcapnmckay