import クラスを使用した 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>();
}
ただし、これを実行するとエラーが発生します:-
パラメーターuseridは[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>
他のヒント
DOは、あなたがこれを必要としない?
<query-param name='UserId' type='Integer'/>
所属していません StackOverflow