在nHibernate中只获取基类型对象

时间:2009-03-13 22:32:15

标签: nhibernate

我正在尝试解决问题。我有一个类表继承aka table-er-subclass(一个主表+其他几个附加数据)。在我的应用程序中,基础对象实例和扩展对象都可以存在。现在我希望能够有时只获取那些基础对象,有时两种类型。一个简单的例子(两个类都映射了它们的所有属性)

public class Base 
{
  public in ID {get; set;}
  public string Something {get; set;}
}

public class Extended : Base 
{
  public bool NewProp{get; set;}
}

现在运行hql查询“从Base”将获取Base和Extedned对象。有没有办法限制这种行为只能获取Base对象?

2 个答案:

答案 0 :(得分:2)

使用HQL,您应该能够使用“class”特殊属性:

from Base b where b.class=Base

另一种方法可能是使用纯SQL,您可以更好地控制检索内容。

无论如何检查(N)Hibernate文档。

答案 1 :(得分:0)

这是上述样本的映射(如果有任何错误原谅我,它必须是一个错误导致样本运行)

<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping auto-import="true"
                   default-lazy="false"
                   xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                   xmlns="urn:nhibernate-mapping-2.2">
  <class name="Base, Test"
         table="base">
    <id name="ID"
        access="property"
        column="ID"
        type="Int64"
        unsaved-value="0">
      <generator class="sequence">
        <param name="sequence">base_id_seq</param>
      </generator>
    </id>
    <property name="Something"
              access="property"
              type="String">
      <column name="somethin"/>
      <joined-subclass name="Extended, Test"
                       table="extended"
                       schema="extended">
        <key column="id" />
        <property name="NewProp"
                  access="property"
                  type="Boolean">
          <column name="newProp"/>
        </property>
      </joined-subclass>
    </class>
</hibernate-mapping>