我見過很多這樣的例子,並且據我所知我的HBM文件遵循相同的模式,但它不工作。首先,文件:如何將NHibernate實體映射到查詢
<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping default-cascade="save-update" xmlns="urn:nhibernate-mapping-2.2">
<class name="ThinAir" mutable="false" lazy="true" >
<id name="JobId">
<generator class="native" />
</id>
<property name="UserLogin"/>
<property name="UserEmail"/>
<property name="DateProcessed"/>
<loader query-ref="myquery"/>
</class>
<sql-query name="myquery">
<return class="ThinAir">
<return-property name="JobID" column="JobId"/>
<return-property name="userLogin" column="UserLogin"/>
<return-property name="DateProcessed" column="DateProcessed"/>
<return-property name="userEmail" column="UserEmail"/>
</return>
<![CDATA[
SELECT DISTINCT JobID,
userLogin,
DateProcessed,
useremail
FROM dbo.someothertable
]]>
</sql-query>
</hibernate-mapping>
「myquery」in-and-of-its,works。也就是說,如果我叫
var x = session.GetNamedQuery("myquery").List();
我得到ThinAir對象的正確的列表。
但是,當我試圖得到ThinAirs像這樣的列表:
var submissions = session.CreateCriteria<ThinAir>().List<ThinAir>();
我得到
試驗方法testThinAir拋出異常: NHibernate.Exceptions.GenericADOException:不能執行查詢 [SELECT this_.JobId作爲JobId16_0_,this_.UserLogin作爲UserLogin16_0_,this_.UserEmail作爲UserEmail16_0_,this_.DateProcessed作爲DateProc4_16_0_從ThinAir THIS_]
我對這一現象的解釋是,NH無視我的<loader>
標籤等試圖從基礎表,默認情況下它假定被命名爲ThinAir加載數據,因爲這名實體類,只有不是任何ThinAir表,因此錯誤消息。
這種解釋是否正確?無論如何,我做錯了什麼,我該怎麼做對不對?
在此先感謝。
邁克爾
非常感謝你:這就像一個魅力,但我仍然不明白爲什麼我原來的方法沒有......這些東西到底在哪裏? – Michael
很好,如果有幫助。是的,文件可能會好一點。但是,無論如何,NHiberante確實有驚人之處......這可能部分難以發現;)祝你好運 –