2008-10-31 91 views
4

我在使用nHibernate获取命名查询方面遇到了很多麻烦。我最近的问题是收到错误消息“无法执行查询”,没有附加信息。是否有任何完整的示例可以从某处下载,因为所有的教程和文档示例都提供了代码瑕疵,但只讲述了让它起作用的一半故事。使用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>; 
} 

回答

0

也许我错了,但似乎ŧ帽子可能是表“TABLENAME”和参数“:TableName”之间的冲突,如果尝试使用另一个参数名称会发生​​什么?

+0

我试过这个,但没有任何区别。 – Craig 2008-10-31 03:43:19

0

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