2010-03-25 51 views
5

我试图在<loader>元素中使用HQL查询来加载基于其他实体的实体。使用nhibernate <loader>元素与HQL查询

我的班级如下

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

和映射看起来像这样

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

,我attemping到顶部映射的是SimpleParentObject,有其自身的映射,并且可以在类被加载和保存没有问题。

当我打电话session.Get <ParentOnly>(ID),在SQL正确违背了SimpleParentObject表,并且ParentOnly对象实例化(因为我可以通过建筑工步),但只有一个空回来,而不是实例化ParentOnly对象。

我可以使用一个而不是HQL成功做到这一点,但我试图以独立于数据库的方式构建它。

有关如何获取<loader><query>元素以返回填充的ParentOnly对象的任何想法......?

感谢

马特

+0

HQL查询顺便说一句,任何人想知道为什么人会想用这个。 – 2010-03-26 08:32:31

回答

0

从我的NHibernate的文件的理解,改变了select语句应该可以解决这个问题。

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

来源:由工具产生的http://www.nhforge.org/doc/nh/en/