我有一个用NHibernate映射的类,我正在尝试使用自定义的sql-query进行加载。特别之处在于它使用了复合id,但我希望这不是问题。
以下是映射的简化版本:
<class name="Person" mutable="false">
<composite-id>
<key-property name="PropertyA" column="propA" type="int" />
<key-property name="PropertyB" column="propB" type="string" />
</composite-id>
<property name="PropertyC" column="propC" type="datetime" />
<loader query-ref="loadPersons" />
</class>
<sql-query name="loadPersons">
<return class="PV" />
<![CDATA[
SELECT propA, propB, propC FROM MyPersons
]]>
</sql-query>
问题是加载器完全被忽略了。发送到数据库的查询完全生成,好像<loader>
元素不在那里:
SELECT this_.propA, this_.propB, this_.propC FROM Person this_
这显然会导致错误:表或视图不存在(因为'Person'只是我们干净的名字)。
任何人都知道这是否与composite-id有关,还是有另一个原因会忽略loader?
请注意,返回数据时可能会出错。我已经看到有一个特殊的别名语法,但在装载机实际做某事之前我无法弄清楚...
答案 0 :(得分:2)
我知道这是一个非常古老的问题,但我一直在寻找答案并提出了一些建议。您使用括在括号中的查询作为表。这有点难看,但它对我有用:
<class name="Person" mutable="false" table="(SELECT propA, propB, propC FROM MyPersons)">
<composite-id>
<key-property name="PropertyA" column="propA" type="int" />
<key-property name="PropertyB" column="propB" type="string" />
</composite-id>
<property name="PropertyC" column="propC" type="datetime" />
</class>