在我的 MSSQL 服务器中,我有一个名为 AllFavourite 的 SQL 视图。为了将数据加载到我的 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>();
}
但是,当我运行它时,出现错误:-
参数 UserId 在 [SELECT * FROM AllFavourite WHERE UserId=:UserId] 中不作为命名参数存在
所以我的问题是可以以这种方式使用命名查询吗?