【问题标题】:Named queries with nHibernate使用 nHibernate 命名的查询
【发布时间】:2008-10-31 03:10:28
【问题描述】:

我在让命名查询与 nHibernate 一起工作时遇到了很多麻烦。我最新的问题是收到错误消息“无法执行查询”,但没有其他信息。有没有我可以从某个地方下载的完整示例,因为所有教程和文档示例都提供了代码片段,但只讲述了让它工作的一半故事。

这是给我带来问题的代码。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Model.Entities
{
    public class TableInfo
    {
        public string TABLENAME { get; set; }
        public string COLUMNNAME { get; set; }
        #region Overrides
        public override int GetHashCode()
        {
            int result = TABLENAME.GetHashCode();
            result += COLUMNNAME.GetHashCode();
            return result;
        }
        public override bool Equals(object obj)
        {
            if (obj == null) return false;
            TableInfo dict = (TableInfo)obj;
            return
                dict.TABLENAME.IsEqual(this.TABLENAME) &&
                dict.COLUMNNAME.IsEqual(this.COLUMNNAME);
        }
        #endregion
    }
}

映射文件

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="Model.Entities" assembly="Model" default-lazy="false">

  <class name="Model.Entities.TableInfo, Model" table="UIM_TableColumnInfo">
    <composite-id>
      <key-property name="TABLENAME" column="TABLENAME" type="string"></key-property>
      <key-property name="COLUMNNAME" column="COLUMNNAME" type="string"></key-property>
    </composite-id>
  </class>

  <sql-query name="GetTableInfo">
    <return alias="tableInfo" class="Model.Entities.TableInfo, Model">
      <return-property name="TABLENAME" column="TABLENAME"/>
      <return-property name="COLUMNNAME" column="COLUMNNAME"/>
    </return>
    <![CDATA[
select 
        info.tci_table_name TABLENAME
        , info.tci_column_name COLUMNNAME
        from ALL_TAB_COLS c
        ,( select 'DATE' TYPE_NAME, 'D' data_type_ind from dual
           union select 'NUMBER','N' from dual
           union select 'VARCHAR2','S' from dual
         ) ct
        , UIM_TableColumnInfo info
        where c.DATA_TYPE         = ct.TYPE_NAME (+)
                and   c.column_id is not null
        and UPPER(c.TABLE_NAME)   = :TableName
        and UPPER(c.COLUMN_NAME)  = UPPER(info.tci_column_name (+))
        order by c.column_id
    ]]>
  </sql-query>  

</hibernate-mapping>

调用代码

public List<TableInfo> GetTableInfo(string tableName)
{
    return m_TableInfoRepository
        .NamedQuery("GetTableInfo")
        .SetString("TableName", tableName)
        .List<TableInfo>() as List<TableInfo>;
}

【问题讨论】:

    标签: nhibernate named-query


    【解决方案1】:

    我假设你之前已经在你的客户端数据库中测试过 SQL,所以我想也许我们应该看看里面发生了什么,所以我可以向你推荐这个链接;

    1. Named Query Error
    2. Using NHibernate and Log4Net in ASP.NET 2.0 applications
    3. How do I view the SQL that is generated by nHibernate?

    希望对你有帮助。

    【讨论】:

      【解决方案2】:

      内部异常应该提供生成并尝试运行的实际 sql。将其粘贴到数据库查询中并直接在数据库中运行。这将有助于指导您。知道为什么不能执行 SQL 就会容易很多

      【讨论】:

        【解决方案3】:

        也许我错了,但似乎表“TABLENAME”和参数“:TableName”之间可能存在冲突,如果您尝试使用其他参数名称会发生​​什么情况?

        【讨论】:

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