NHibernate with Castle,HQL 找不到参数 [param]
NHibernate with Castle, HQL could not locate parameter [param]
我在使用 Castle ActiveRecord 映射的 class 上进行 HQL 查询并收到以下错误:NHibernate.QueryParameterException:无法找到命名参数 [param]。
这是我的 class,经过简化:
[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
无效。我验证了查询中的间距。
如果我在 :num
所在的位置抛出 7
并完全删除 :num
及其 set 语句,则查询工作正常。
所以我是这样填充我的会话变量的:
session = ActiveRecordMediator.GetSessionFactoryHolder().GetSessionFactory(typeof(T)).OpenSession();
其中 T = 查询 return 类型,又名 Int32
.
我将 T 更改为我正在查询的 class,MyTable
,一切都开始工作了。可惜 Castle/NHibernate 没有 return 更有用的错误。
我的问题不包括会话行。
我在使用 Castle ActiveRecord 映射的 class 上进行 HQL 查询并收到以下错误:NHibernate.QueryParameterException:无法找到命名参数 [param]。
这是我的 class,经过简化:
[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
无效。我验证了查询中的间距。
如果我在 :num
所在的位置抛出 7
并完全删除 :num
及其 set 语句,则查询工作正常。
所以我是这样填充我的会话变量的:
session = ActiveRecordMediator.GetSessionFactoryHolder().GetSessionFactory(typeof(T)).OpenSession();
其中 T = 查询 return 类型,又名 Int32
.
我将 T 更改为我正在查询的 class,MyTable
,一切都开始工作了。可惜 Castle/NHibernate 没有 return 更有用的错误。
我的问题不包括会话行。