nhibernate - 在带有导入类的 hbm 中使用命名查询

标签 nhibernate class import named-query hbmxml

在我的 MSSQL 服务器中,我有一个名为 AllFavourite 的 SQL View 。为了将数据加载到我的 DTO 类中,我的 hbm.xml 文件中有以下内容...

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" 
       namespace="Domain.Model.Entities" assembly="Domain.Model">
  <import class="AllFavourite"/>
</hibernate-mapping>

在我的代码中,我有以下内容。

public IList<AllFavourite> GetFavourites(int userId)
{
    var query = Session
        .CreateSQLQuery("SELECT * FROM AllFavourite where UserId=:UserId")
        .SetInt32("UserId", userId)
        .SetResultTransformer(new AliasToBeanResultTransformer(typeof(AllFavourite)));
    return query.List<AllFavourite>();
}

这非常有效,并产生了我想要的结果,但是我想将 SQL 从代码移动到 hbm.xml 文件中的命名查询中。所以我的 hbm.xml 文件现在看起来像这样

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" 
namespace="Domain.Model.Entities" assembly="Domain.Model">
  <import class="AllFavourite"/>
  <query name="GetAllFavouriteByUserId">
    <![CDATA[
    SELECT * FROM AllFavourite WHERE UserId=:UserId
    ]]>
  </query>
</hibernate-mapping>

我的代码现在看起来像这样

public IList<AllFavourite> GetFavourites(int userId)
{
    var query = Session
        .GetNamedQuery("GetAllFavouriteByUserId")
        .SetInt32("UserId", userId)
        .SetResultTransformer(new AliasToBeanResultTransformer(typeof(AllFavourite)));
    return query.List<AllFavourite>();
}

但是,当我运行此命令时,我收到错误:-

Parameter UserId does not exist as a named parameter in [SELECT * FROM AllFavourite WHERE UserId=:UserId]

所以我的问题是否可以以这种方式使用命名查询?

最佳答案

query 标签需要 HQL 查询:

<query name="GetAllFavouriteByUserId">
    <![CDATA[
    from AllFavourite where UserId = :UserId
    ]]>
</query>

如果你想编写原生 SQL 查询,你应该使用 sql-query 标签:

<sql-query name="GetAllFavouriteByUserId">
    <return alias="foo" class="Foo"/>
    <![CDATA[
    SELECT {foo.ID} as {foo.ID}, 
           {foo}.NAME AS {foo.Name} 
    FROM sometable 
    WHERE {foo}.ID = :UserId
    ]]>
</sql-query>

关于nhibernate - 在带有导入类的 hbm 中使用命名查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1984550/

相关文章:

nhibernate - 使用 NHibernate ICriteria/QueryOver 查询向外连接添加条件

NHibernate navigators 映射到组合键问题的一部分——遗留数据库的使用

java - Java 中数据的表示/建模(类与实例变量)

python - 为什么我需要从 tkinter 模块显式导入字体模块,即使已使用 "*"导入了完整模块?

nhibernate - NServiceBus/NHibernate 需要 MSDTC 吗?

java - 是否有可能将 "method/field"文字与 Java/Scala 中的类文字相媲美?

javascript - jQuery 将类添加到一个元素而不是所有具有相同类的元素

json - com.google.appengine.repackaged 可能会导致您的应用在没有警告的情况下崩溃

python - 为什么我们在导入 print_function 后调用 print(在 Python 2.6 中)

asp.net-mvc - 使用结合了状态模式的域模型