2016-05-17 7 views
0

キャッスルActiveRecordでマップされたクラスに対してHQLクエリがあり、次のエラーが発生しました:NHibernate.QueryParameterException:名前付きパラメータ[param]が見つかりませんでした。ここでNHibernateキャッスルで、HQLがパラメータ[param]を見つけられませんでした

は簡略化され、私のクラスです:

[Serializable] 
[ActiveRecord("my_table", Schema = "my_schema", UseAutoImport = false, Mutable = false)] 
public class MyTable : MyServerActiveRecord<MyTable> //Extension of ActiveRecordBase<> 
{ 
    [PrimaryKey(PrimaryKeyType.Identity, "my_pk")] 
    public int ID {get;set;} 

    [Property("my_column1")] 
    public int MyColumn1 {get;set;} 

    [Property("my_column2")] 
    public int MyColumn2 {get;set;} 
} 

そして、私のHQL SetInt32の代わりSetParameter動作しませんでしたを使用して

public static int GetSum(int num1){ 
    IQuery query = session.CreateQuery(@" 
     select sum(case when t.MyColumn2 = 2 then 1 else 0 end)    
     from My.Complete.Namespace.MyTable t 
     where t.MyColumn1 = :num 
     group by t.MyColumn1 
    "); 
    query.SetParameter("num", num1); 
    return query.UniqueResult<Int32>(); 
} 

と方法。クエリの間隔を確認しました。

7:numである場合、クエリは正常に動作し、:numとそのセットステートメントを完全に削除します。

+0

このようなトラブルは一度もありませんでした。 'query.NamedParameters'を調べて、あなたの' HQL'クエリで何が見つかったのかを調べることができますか? –

+0

@Frédéric、no luck、NamedParametersの長さはクエリの定義後にゼロです – allie

答えて

0

だから私はこのように私のセッション変数を移入したTは、クエリの戻り値の型、別名Int32を=

session = ActiveRecordMediator.GetSessionFactoryHolder().GetSessionFactory(typeof(T)).OpenSession(); 

Tを、私が照会していたクラス、MyTableに変更し、すべてが機能し始めました。 Castle/NHibernateのバマーは、より有用なエラーを返しません。 質問にセッション行を含めないと悪いです。

関連する問題