NHibernate与Castle,HQL无法找到参数[param]

时间:2016-05-17 17:08:17

标签: c# nhibernate hql castle-activerecord

我在使用Castle ActiveRecord映射的类上有一个HQL查询并收到以下错误:NHibernate.QueryParameterException:找不到命名参数[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方法

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>();
}

使用SetInt32代替SetParameter并不起作用。我验证了查询中的间距。

如果我在7处抛出:num并完全删除:num及其set语句,则查询可以正常工作。

1 个答案:

答案 0 :(得分:0)

所以我填充了我的会话变量:

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

其中T =查询返回类型,又名Int32

我把T改成了我要查询的班级,MyTable,一切都开始了。对Castle / NHibernate没有回复更有帮助的错误感到遗憾。 我不喜欢在问题中包括会话行。