ROWNUM
- специфичная для поставщика функциональность (в частности, Oracle). SQLServer имеет нечто очень похожее при создании запросов с использованием псевдо-ограничений: запросы должны быть заключены в SELECT ROW_NUMBER() OVER ...
, что обычно нельзя делать в Hibernate, не прибегая к необработанному SQL.
Я бы порекомендовал проверить специфичный для поставщика диалект , который вы используете для поддержки этой функции. У них есть один для всех основных поставщиков, в том числе:
- PostgreSQL
- MySQL
- Oracle
- SQLServer
- Sybase
- и т.д.
Также убедитесь, что вы действительно используете правильный диалект в своей конфигурации гибернации.
Судя по источнику, Hibernate поддерживает функцию Oracle ROWNUM
, по крайней мере, с Oracle 8.
EDIT:
Это должно произвести то, что вы ищете. Я позволил себе преобразовать поля / таблицы БД в имена, соответствующие Java, потому что похоже, что вы используете сырой SQL вместо объектов Java (таблица "vw_report_alert" -> VwReportAlert, столбец "user_id" -> userId, столбец "alert_id" -> id, столбец "event_creation_date" -> eventCreationDate)
getSession().createQuery(
"select r from VwReportAlert r " +
"where r.userId = :userId " +
"order by r.eventCreationDate desc, r.id desc")
.setInteger("userId", 147)
.setMaxResults(25)
.list();