我正在尝试在 <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 对象。

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

关于如何让 <loader><query> 元素返回填充的 ParentOnly 对象的任何想法......?

谢谢

马特

最佳答案

根据我对 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/

关于c# - 在 HQL 查询中使用 nhibernate <loader> 元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2519335/

10-13 06:08