0

編集: NHibernate を介してストアド プロシージャを呼び出し、エンティティにマップする別の解決策を見つけました。

 var campaignsItems = nhSession.CreateSQLQuery("exec Select_List_Campaigns :currentLatDegrees, :currentLonDegrees, :radiusInMiles, :pageSize, :currentPage, :search, :isTop, :topDealPercente")
                 .SetParameter("currentLatDegrees", currentLatDegrees)
                 .SetParameter("currentLonDegrees", currentLonDegrees)
                 .SetParameter("radiusInMiles", radius)
                 .SetParameter("pageSize", pageSize)
                 .SetParameter("currentPage", page)
                 .SetParameter("search", search)
                 .SetParameter("isTop", isTop)
                 .SetParameter("topDealPercente", topDealPercente)
                 .SetResultTransformer(Transformers.AliasToBean<CampaignListModel>())
                 .List<CampaignListModel>();

ご覧のとおり、SetResultTransformer ヘルプを使用して、パラメーターを設定し、結果をエンティティにマップできます。クラスのプロパティがストアド プロシージャの結果セットの列の名前と等しい場合は、すべて問題ありません。

古い質問:

いくつかのストアド プロシージャがあり、エンティティをこのストアド プロシージャの結果レコード セットにマップしたいと考えています。私の hbm ファイル:

<?xml version="1.0" encoding="utf-8" ?>
  <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
    <sql-query name="Select_Latest_Campaigns">
        <return alias="cfl" class="Austradelia.Core.ProcedureResultEntities.CampaignForList, Austradelia.Core">
          <return-property name="Id" column="Id"></return-property>
          <return-property name="ShortDescription" column="ShortDescription"></return-property>
          <return-property name="CampaignType" column="CampaignType"></return-property>
          <return-property name="StartDate" column="StartDate"></return-property>
          <return-property name="FinishDate" column="FinishDate"></return-property>
          <return-property name="Quantity" column="Quantity"></return-property>
          <return-property name="TotalRedeemsCount" column="TotalRedeemsCount"></return-property>
          <return-property name="MerchantId" column="MerchantId"></return-property>
          <return-property name="MerchantBusinessName" column="MerchantBusinessName"></return-property>
          <return-property name="MerchantAddress" column="MerchantAddress"></return-property>
          <return-property name="MerchantFollowersCount" column="MerchantFollowersCount"></return-property>
          <return-property name="TipsCount" column="TipsCount"></return-property>
          <return-property name="LikesCount" column="LikesCount"></return-property>
          <return-property name="CategoryId" column="CategoryId"></return-property>
          <return-property name="CategoryName" column="CategoryName"></return-property>
          <return-property name="RowNumber" column="RowNumber"></return-property>
          <return-property name="TotalCount" column="TotalCount"></return-property>
        </return>
        exec Select_Latest_Campaigns :currentLatDegrees, :currentLonDegrees, :radiusInMiles, :pageSize, :currentPage, :search
    </sql-query>
  </hibernate-mapping>

このクエリを実行しようとすると、次の例外が発生します。

Exception Details: NHibernate.HibernateException: Errors in named queries: {Select_Latest_Campaigns}

の上:

Line 43:             return configuration.BuildSessionFactory();

何が間違っているのですか?

4

1 に答える 1

0

次のプロパティを追加して、persistence.xml を変更します。

<property name="hibernate.query.factory_class" value="org.hibernate.hql.classic.ClassicQueryTranslatorFactory" />

SQLのバージョンを教えていただけない場合は、このヘルプが役立つことを願っています!?

于 2011-06-08T12:39:33.617 に答える