2010-03-25 8 views
5

Ich versuche, eine HQL-Abfrage in einem <loader> Element zu verwenden, um eine Entität basierend auf anderen Entitäten zu laden.Verwenden von Nhibernate <loader> Element mit HQL-Abfragen

Meine Klasse ist wie folgt

public class ParentOnly 
{ 
    public ParentOnly(){} 
    public virtual int Id { get; set; } 
    public virtual string ParentObjectName { get; set; } 
} 

und die Abbildung sieht wie folgt aus

<class name="ParentOnly"> 
    <id name="Id"> 
    <generator class="identity" /> 
    </id> 
    <property name="ParentObjectName" /> 
    <loader query-ref="parentonly"/> 
</class> 

<query name="parentonly" > 
    select new ParentOnly() 
    from SimpleParentObject as spo 
    where spo.Id = :id 
</query> 

Die Klasse, die ich oben auf der Karte bin attemping von SimpleParentObject ist, die ihre eigene Mapping hat und geladen und gespeichert werden ohne Probleme.

Wenn ich rufe session.Get <ParentOnly> (id) die SQL läuft richtig gegen den SimpleParentObject Tisch und ein ParentOnly Objekt instanziiert wird (wie ich durch die constructer Schritt kann), aber nur ein Null zurückkommt und nicht das instanziiert ParentOnly-Objekt.

Ich kann dies erfolgreich mit einer anstelle der HQL tun, aber ich versuche, dies in einer datenbankunabhängigen Art und Weise zu erstellen.

Irgendwelche Gedanken dazu, wie man die <loader> und <query> Elemente erhält, um ein bevölkertes ParentOnly Objekt zurückzugeben ...?

Dank

Matt

+0

Die HQL-Abfrage durch ein Werkzeug btw erzeugt wird, für fragen jemand, warum man diese nutzen möchte. –

Antwort

0

Von meinem Verständnis der nHibernate Dokumentation, die Select-Anweisung zu ändern, soll dieses Problem beheben.

<query name="parentonly" > 
    select ParentObjectNameAS {spo.Name}, Id AS {spo.Id} 
    from SimpleParentObject as spo 
    where spo.Id = :id 
</query> 

Quelle: http://www.nhforge.org/doc/nh/en/

Verwandte Themen