2009-10-15 109 views
1

我来自使用Hibernate的Java端,我只是没有找到合适的地方把命名查询放在NHibernatenhibernate命名查询,找不到名称

使用Visual Studio 2008,C#2008

我有一个查询

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

,我希望把它放在.hbm.xml的账户表(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) 
       { 
         ... 

我在想什么?

回答

5

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

我现在有:

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

和这个作品

3

此外,请确保您的映射文件生成操作设置为“嵌入的资源”,否则你会得到同样的错误,即使映射文件本身是正确的。

0

还要确保hbm文件的扩展名是.hbm.xml而不是.xml。这也会导致相同的错误。