使用nhibernate的<loader>元素与HQL查询

5
我将尝试在<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>

我试图在SimpleParentObject上进行映射,它有自己的映射,并且可以在没有问题的情况下加载和保存。当我调用session.Get<ParentOnly>(id)时,sql正确地针对SimpleParentObject表运行,并实例化了一个ParentOnly对象(因为我可以跟踪构造函数),但是只返回了一个null,而不是已实例化的ParentOnly对象。我可以使用<select>而不是HQL成功地执行此操作,但是我正在尝试以数据库无关的方式构建它。您有什么想法如何使<loader><query>元素返回填充的ParentOnly对象吗?谢谢,Matt。

顺便提一下,HQL查询是由一个工具生成的,对于想知道为什么要使用它的人来说。 - Frans Bouma
1个回答

0
根据我对nHibernate文档的理解,更改选择语句应该可以解决这个问题。
<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/zh-cn/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接