我有下表
学生[student_id,Student_name,Marks]
我想根据分数对学生进行排名,并使用FluentNHibernate通过student_id获得具体的排名位置
我写了下面的hql查询并得到了
NHibernate.Hql.Ast.ANTLR.QuerySyntaxException:识别错误 发生了。异常。
NHibernate.IQuery q = session
.CreateQuery("SELECT student_id, student_name, marks, @curRank := @curRank + 1 AS rank"+
" FROM Student p, ( SELECT @curRank := 0 ) q " +
" where student_Id = '02610' ORDER BY marks DESC")
.SetMaxResults(1);
我认为问题是Hql无法识别':=' 如果有人知道如何解决这个问题,请告诉我,谢谢
答案 0 :(得分:0)
我不完全确定查询的内容(在MySQL中)..希望你知道怎么做排名,如果没有在这里检查一个例子:
<强> Get current rank using mysql 强>
要在NHibernate中使用正确的(工作的MySQL),我们必须像这样调整:
NHibernate.ISQLQuery q = session
.CreateSQLQuery("SELECT student_id, student_name...")
.SetMaxResults(1)
;
关键是,CreateSQLQuery
返回ISQLQUery,它实际上是原始SQL,与底层数据库引擎方言有关。
以前使用的CreateQuery
是关于HQL的,它独立于数据库引擎方言......但需要实体查询(不是原始SQL)
在这里阅读更多内容: