我正在尝试解决问题。我有一个类表继承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对象?
答案 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>