hql rank function, select in select вызывает исключение antlr - PullRequest
0 голосов
/ 06 марта 2011

Я пытаюсь заставить работать следующий запрос hql, но безуспешно. Я пытаюсь выяснить, какой ранг имеет конкретного пользователя, в зависимости от значения поля в форме. В SQL это прекрасно работает.

SELECT tmp.rang
    FROM (
          SELECT    b.ID as user, rank() as rang OVER (ORDER BY frh.Wert) 

          FROM      EKB.KennzahlenManagement.FormularResultHistorie as frh
          JOIN      frh.Formular_Bogen_K_Feld  fbkFeld
          JOIN      frh.Formular_Gesendent.Benutzer b

          WHERE     fbkFeld.FormularBogen.ID =:formularBogenId
          AND       fbkFeld.ResultFlag = 1
          AND       frh.Formular_Gesendent.Eingabe_nummer IN 
                                        (SELECT MAX(tmp.Eingabe_nummer) 
                                         FROM EKB.KennzahlenManagement.Formular_gesendet tmp
                                         WHERE tmp.Benutzer.ID = frh.Formular_Gesendent.Benutzer.ID 
                                         AND tmp.Formular.ID = frh.Formular_Gesendent.Formular.ID
                                         GROUP BY tmp.Benutzer
                                        )
    ) as tmp
    WHERE   tmp.usr =:userId 

Пока что я определил две проблемы.

1) Я получаю "NHibernate.Hql.Ast.ANTLR.QuerySyntaxException: исключение типа 'Antlr.Runtime.NoViableAltException' было сгенерировано. Рядом со строкой ..." из-за второго выбора. Как я могу решить эту проблему? Есть ли обходные пути?

2) Кажется, что-то не так с функцией rank (). Я также получаю аналогичное исключение, как выше. Нет ли ранга () в HQL? Если есть, не могли бы вы привести пример?

1 Ответ

0 голосов
/ 06 марта 2011

Насколько я знаю, RANK () в настоящее время не реализован в NHibernate. Возможно, вы захотите попробовать зарегистрировать его в качестве пользовательской функции на диалекте. Вот пример , с которого можно начать. Регистрация RANK, вероятно, будет более сложной, чем в примере, из-за ее синтаксиса.

...