Mysql使用Fluenthibernate基于列进行排名

本文关键字:于列进 使用 Fluenthibernate Mysql | 更新日期: 2023-09-27 17:59:02

我有下面的表

学生[Student_id,学生名称,分数]

我想根据分数对学生进行排名,并使用FluentHibernate 通过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无法识别':='如果有人知道如何解决这个问题,请告诉我,谢谢

Mysql使用Fluenthibernate基于列进行排名

我不完全确定查询的内容(在MySQL中)。。希望你知道如何进行排名,如果不检查这里的例子:

使用mysql获取当前排名

要在NHibernate中使用正确的(工作MySQL),我们必须这样调整:

NHibernate.ISQLQuery q = session
    .CreateSQLQuery("SELECT student_id, student_name...")
    .SetMaxResults(1)
    ;

关键是,CreateSQLQuery返回ISQLQUery,它实际上是原始SQL,与底层数据库引擎方言有关。

以前使用的CreateQuery是关于HQL的,它独立于DB引擎方言。。。但需要实体查询(而不是原始SQL)

点击此处阅读更多:

17.1.使用ISQLQuery