0
我在NHibernate上运行命名查询时遇到了一些问题。我设置为返回值的类是组织 - 不抽象 - ,并且我有第二个类(继承自此)称为FullOrganization。我有一个每个具体类架构的表,其他一切工作都很好,但是在运行命名查询时(这个顺序不提供任何细节),我总是收到一个异常。命名查询和继承
的映射接近以下内容:
<hibernate-mapping
xmlns="urn:nhibernate-mapping-2.2"
namespace="XXX"
assembly="XXX"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:nhibernate-mapping-2.2 ..\nhibernate-mapping.xsd" auto-import="false">
<class name="Organization" table="Organizations" lazy="false">
<id name="Identity" column="Id">
<generator class="identity"/>
</id>
<property name="Name" column="Name" />
<many-to-one name="OrganizationType" column="OrganizationTypeId"/>
...
<joined-subclass name="FullOrganization" table="FullOrganizations" lazy="false">
<key column="OrganizationId"/>
...
</joined-subclass>
</class>
而命名的查询会是这样的:
<sql-query name="OrganizationSearch" read-only="true" cacheable="false">
<return class="Organization" />
<![CDATA[
SELECT *
FROM Organizations o
INNER JOIN OrganizationTypes ot ON o.OrganizationTypeId = ot.Id
LEFT JOIN FullOrganizations fo ON o.Id = fo.OrganizationId
WHERE
// Several Filters Here
]]>
我应该如何映射查询结果?请注意,返回的对象可能是组织或FullOrganization的实例。
其实我期待我可以用一个单一的搜索方法,这就是为什么我做了LEFT在SQL查询中加入,WHERE部分的条件都是这种类型的OR(fo。 IS NOT NULL AND fo。 LIKE:pattern)。但现在你提到它,我可能错误的假设为NHibernate应创建组织或FullOrganization实例取决于只有当FullOrganization字段不是NULL ... –
Anero
2011-04-21 15:37:07
我没有遵循这个确切的实现,而是使用DTO结果集。但是,我正在将答案标记为接受,因为它会让我达成决议。谢谢! – Anero 2011-05-29 20:59:14