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