【问题标题】:nhibernate map sql stored procedure to entitynhibernate将sql存储过程映射到实体
【发布时间】:2011-06-08 09:50:32
【问题描述】:

编辑: 我找到了另一种通过 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();

任何想法有什么问题?

【问题讨论】:

    标签: nhibernate-mapping hbm sql


    【解决方案1】:

    通过添加这个属性来改变persistence.xml:

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

    如果不让我知道你的 sql 版本是什么,我希望这能有所帮助!?

    【讨论】:

    • 我没有 persistence.xml 文件。我使用 Fluent NHibernate 来映射我的所有实体,仅对于我想要使用 hbm.xml 文件的这个存储过程。我可以在哪里设置此属性以及用于什么设置?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多