質問

私の 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'/>
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top