3

この例をいくつか見てきましたが、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テーブルはありません、したがってエラーメッセージ。

その解釈は正しいですか?いずれにせよ、私は何を間違っており、どうすれば正しく行うことができますか?

前もって感謝します。

マイケル

4

1 に答える 1

3

これを実現する方法の 1 つは、マッピングをクエリから に移動することsubselectです。

<?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" >

  <subselect>
    <![CDATA[
    SELECT DISTINCT JobID,
    userLogin,
    DateProcessed,
    useremail
    FROM         dbo.someothertable
    ]]>
  </subselect>

  ... // rest of the mapping
于 2013-12-11T05:19:28.293 に答える