私の 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] の名前付きパラメータとして存在しません
だから私の質問は、この方法で名前付きクエリを使用することは可能ですか?