【问题标题】:Using nhibernate <loader> element with HQL queries使用带有 HQL 查询的 nhibernate <loader> 元素
【发布时间】:2011-01-31 22:30:16
【问题描述】:

我正在尝试在 &lt;loader&gt; 元素中使用 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&lt;ParentOnly&gt;(id) 时,sql 针对 SimpleParentObject 表正确运行,并且实例化了 ParentOnly 对象(因为我可以单步执行构造函数),但只返回 null,而不是返回实例化 ParentOnly 对象。

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

对如何让 &lt;loader&gt;&lt;query&gt; 元素返回填充的 ParentOnly 对象有任何想法...?

谢谢

马特

【问题讨论】:

  • HQL 查询是由一个工具 btw 生成的,任何人都想知道为什么要使用它。

标签: c# nhibernate nhibernate-mapping hql


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多