与进口类HBM使用命名查询
-
22-09-2019 - |
题
在我的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>();
}
然而,当我运行此我得到一个错误: -
参数用户ID不存在作为 在[SELECT * FROM命名参数 AllFavourite其中userid =:用户ID
所以我的问题是有可能以这种方式使用命名查询?
解决方案
在query
标签需要一个HQL查询:
<query name="GetAllFavouriteByUserId">
<![CDATA[
from AllFavourite where UserId = :UserId
]]>
</query>
如果你想写你应该使用sql-query
标签的原生SQL查询:
<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>
其他提示
你不需要这个?
<query-param name='UserId' type='Integer'/>
不隶属于 StackOverflow