Это проблема с подсветкой синтаксиса редактора.
Это было размещено на форуме Hibernate несколько лет назад, когда его спросили, почему это работает в Hibernate 2, но не в Hibernate 3:
Предел был никогда поддерживаемый пункт в HQL. Вы должны использовать setMaxResults ().
Так что, если это сработало в Hibernate 2, похоже, что это было случайно, а не намеренно. Я думаю , что это произошло потому, что парсер Hibernate 2 HQL заменил бы биты запроса, которые он распознал как HQL, и оставил все остальное, как было, чтобы вы могли незаметно ввести некоторый родной SQL. В Hibernate 3, однако, есть правильный AST HQL Parser, и он гораздо менее снисходительный.
Я думаю Query.setMaxResults ()
действительно ваш единственный вариант.
Вы можете легко использовать нумерацию страниц.
@QueryHints({ @QueryHint(name = "org.hibernate.cacheable", value = "true") })
@Query("select * from a_table order by a_table_column desc")
List<String> getStringValue(Pageable pageable);
Вы должны передать new PageRequest(0, 1)
для получения записей и из списка получить первую запись.
Если вы не хотите использовать setMaxResults ()
в объекте Query
, тогда вы всегда можете вернуться к использованию обычного SQL.
Если вы не хотите использовать setMaxResults, вы также можете использовать Query.scroll вместо list и получать нужные строки. Например, полезно для подкачки.
По моим наблюдениям, даже если в HQL (hibernate 3.x) есть limit, он либо вызывает ошибку парсинга, либо просто игнорируется. (если у вас есть order by + desc/asc перед limit, он будет проигнорирован, если у вас нет desc/asc перед limit, это вызовет ошибку парсинга)