gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 07:00:16 24 4
gpt4 key购买 nike

在我的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com