この例をいくつか見てきましたが、HBM ファイルが同じパターンに従っていることがわかりますが、機能していません。まず、ファイル:
<?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」はそれ自体で機能します。つまり、私が電話すると
var x = session.GetNamedQuery("myquery").List();
ThinAirオブジェクトの正しいリストを取得します。
しかし、次のようなThinAirのリストを取得しようとすると、次のようになります。
var submissions = session.CreateCriteria<ThinAir>().List<ThinAir>();
私は得る
テスト メソッド testThinAir が例外をスローしました: NHibernate.Exceptions.GenericADOException: クエリを実行できません [ SELECT this_.JobId as JobId16_0_, this_.UserLogin as UserLogin16_0_, this_.UserEmail as UserEmail16_0_, this_.DateProcessed as DateProc4_16_0_ FROM ThinAir this_ ]
この現象の私の解釈は、NH が私の<loader>タグを無視し、基礎となるテーブルからデータをロードしようとしているということです。デフォルトでは、それはエンティティ クラスの名前であるため、ThinAirという名前であると想定されていますが、 ThinAirテーブルはありません、したがってエラーメッセージ。
その解釈は正しいですか?いずれにせよ、私は何を間違っており、どうすれば正しく行うことができますか?
前もって感謝します。
マイケル