Active Record или NHibernate генерируют недопустимый Sql для подкачки на SqlQuery

При применении пейджинга (с использованием SetFirstResult и SetMaxResults) к ActiveRecord SqlQuery с nHibernate 2.1.1 GA и ActiveRecord 2.0.1 создается следующий sql:

SELECT 
    TOP 40 
FROM 
    (, ROW_NUMBER() OVER(ORDER BY account.Name, account.State) as __hibernate_sort_row 
        select  account.Name 
                <rest of query>
    ) as query 
WHERE query.__hibernate_sort_row > 40 
ORDER BY query.__hibernate_sort_row

Эти ошибки и, более того, не работают в sql ... тогда как это должно быть

SELECT TOP 40  * 
FROM ( 
    SELECT
        ROW_NUMBER() OVER (ORDER BY account.Name, account.State) as __hibernate_sort_row 
    ,select  account.Name 
                <rest of query>
) as query 
WHERE query.__hibernate_sort_row > 40 
ORDER BY query.__hibernate_sort_row

Странные вещи:

  • Запрос без подкачки работает нормально
  • При разбивке по страницам страница 1 работает нормально (т.е. первый результат = 0, maxresult = 40)
  • Точно такой же подход отлично работает для HqlQuery, но затронут только SqlQuery.

Это относится к MS2005Dialect и MS2008Dialect ...

Кто-нибудь знает мою глупую проблему?


person penderi    schedule 04.02.2010    source источник
comment
вы делаете select * в запросе sql?   -  person dotjoe    schedule 04.02.2010
comment
нет. Все поля номинированы. Я также присвоил им однозначный псевдоним, он по-прежнему производит junk sql. Добавляю вручную сейчас. Не идеально.   -  person penderi    schedule 05.02.2010


Ответы (2)



Я использовал для этого обходной путь. Здесь его ссылка. Может быть вам полезно.

person Afshar Mohebi    schedule 27.11.2010