1

我来自使用 Hibernate 的 Java 方面,只是没有找到将命名查询放入NHibernate.

使用 Visual Studio 2008 , C# 2008

我有一个查询

<query name="SchwabAccountList">
  from DB_Accounts a
  where a.AdminOffCode = 'SWB'
</query>

我想把它放在.hbm.xmlAccount 表 ( DB_Accounts)

我把它放在文件的末尾,但在<class>标签内

    <query name="AccountList">
      from DB_Accounts a
      where a.AdminOffCode = 'SWB'
    </query>
  </class>
</hibernate-mapping> 

我正在使用的代码,我尝试了几种不同的方法,但得到

Named query not known: AccountList

或我尝试使用的任何其他名称 ( assembly.dir.dir.class.queryname) 之类的东西。

访问代码看起来像。

              ISessionFactory factory = cfg.BuildSessionFactory();
              ISession session = factory.OpenSession();

              IList<DB_Accounts> accountList = 
                  (IList<DB_Accounts>)(session.GetNamedQuery("AccountList").List());

              foreach (BDM_Controller.Source.ORM.DB_Accounts acctRec in accountList)
              {
                         ...

我错过了什么?

4

3 回答 3

5

我将查询移出标签并让它识别查询。我之前在映射文件的顶部有它,它抱怨以下标签。单引号可能有问题。我添加了 CDATA 包装器来防止这些问题。所以这两个变化的结合可能解决了这个问题。

我现在有:

  </class>
  <query name="AccountList" cacheable="true" read-only="true">
    <![CDATA[
      from DB_Accounts a
      where a.AdminOffCode = 'SWB'
      ]]>
  </query>
</hibernate-mapping> 

这有效

于 2009-10-15T21:29:42.620 回答
3

另外,请确保您的映射文件构建操作设置为“嵌入式资源”,否则即使映射文件本身正确,您也会收到相同的错误。

于 2011-04-28T19:12:28.003 回答
1

还要确保添加的 hbm 文件扩展名为 .hbm.xml,而不仅仅是 .xml。这也会导致同样的错误。

于 2015-12-16T10:24:28.253 回答