2010-03-25 14 views
5

Sto tentando di utilizzare una query HQL in un elemento <loader> per caricare un'entità in base ad altre entità.Uso di nibernato <loader> elemento con query HQL

La mia classe è la seguente

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

e la mappatura si presenta così

<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> 

La classe che sto attemping per mappare in cima è SimpleParentObject, che ha la sua propria mappatura e può essere caricato e salvato senza problemi.

Quando chiamo session.Get <ParentOnly> (id) SQL esegue correttamente contro il tavolo SimpleParentObject, e un oggetto ParentOnly viene istanziato (come posso scorrere il constructer), ma solo un null ritorna, piuttosto che il istanziata Oggetto ParentOnly.

Posso farlo con successo utilizzando un al posto dell'HQL, ma sto provando a crearlo in un database indipendente.

Qualche idea su come ottenere gli elementi <loader> e <query> per restituire un oggetto ParentOnly compilato ...?

Grazie

Matt

+0

La query HQL è generato da uno strumento btw, per chiunque chiedendo perché si vorrebbe utilizzare questo. –

risposta

0

Dalla mia comprensione della documentazione NHibernate, cambiando l'istruzione select dovrebbe risolvere questo problema.

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

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

Problemi correlati