【问题标题】:Nhibernate Named SQL QueryNhibernate 命名 SQL 查询
【发布时间】:2013-05-16 10:17:09
【问题描述】:

谁能告诉我下面使用NHibernate的命名SQL查询有什么问题。 当我收到错误时 - “命名查询中的错误:GetSecondReviewIncomeStatements”:

 <sql-query name="GetSecondReviewIncomeStatements" read-only="true">
 <![CDATA[
  SELECT I.TotalNetSales,I.CostOfGoodsSold,I.GrossProfit
  FROM IncomeStatement as incomeStatement
  INNER JOIN FETCH CompSearchResultItem as resultItem
  ON incomeStatement.Comparable.ID = resultItem.Comparable.ID
  AND resultItem.CompSearch.ID = :compSearchID     
  ]]>-->
 </sql-query>-->

我在网上搜索了很多,有人说是OnWhere。 我也只尝试了NamedQuery,但每次都遇到同样的错误。

【问题讨论】:

  • 你在使用 Nhibernate 的存储过程吗?
  • 请分享示例代码,仅示例,不要放整个代码
  • 什么是额外的 --> ]]> ??
  • 好的..您打算使用 hql 还是 sql 进行查询? (无论哪种方式,您都有语法错误)。如果是 hql,您应该使用 而不是 映射。
  • 您的查询有错误。例如I 定义在哪里? SQL 查询如何包含像incomeStatement.Comparable.ID 这样的表达式?我认为您正在寻找使用HQL,其标签为&lt;query&gt;&lt;/query&gt;

标签: nhibernate named-query


【解决方案1】:

请检查 .hbm.xml 文件中的命名查询格式。

在 hbm.xml 中

     <sql-query name="ShowProducts">
        <return alias="Product" class="Product" />
        exec ShowProducts
      </sql-query>

<sql-query name="DeleteProducts">
    <query-param name="Id" type="int"></query-param>

    exec DeleteProducts @ID=:Id
  </sql-query>

在代码使用中

 IQuery query = (IQuery)session.GetNamedQuery("ShowProducts");


        var listProducts = query.List<Product>();

        GridView1.DataSource = listProducts;
        GridView1.DataBind();

【讨论】:

    【解决方案2】:

    如果你把它'原样'放在你的 rdbms sql 执行器中,你的 SQL 会运行吗?

    除了封闭的CDATA 元素之后的奇怪--&gt;,我注意到您没有在查询中声明I 别名。

    我的意思是,这些列前面有 I...

    SELECT I.TotalNetSales,I.CostOfGoodsSold,I.GrossProfit
    

    ...从哪里来?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-12
      相关资源
      最近更新 更多