Ни один из следующих двух подходов к выполнению простого запроса Hibernate с ограниченными результатами не работает в Sybase. Оба они приводят к SybSQLException: неверный синтаксис рядом с '@p0'.
Query q = session.createQuery( "from Record" );
q.setMaxResults( 50 );
q.list();
or
Criteria criteria = session.createCriteria( Record.class );
criteria.setMaxResults( 50 );
criteria.list();
Похоже, что фактический SQL, сгенерированный в обоих этих случаях, выглядит так...
select top ? record_id, etc...
и Sybase отказывается от ?, который Hibernate не заполняет значением 50 (это мое предположение). Я искал везде, и хотя другие сталкивались с подобной ошибкой, это не было связано с попыткой ограничить результаты.
Я могу выполнить прямое выражение SQL, такое как «выбрать 50 лучших из записей», и оно отлично работает, поэтому я знаю, что моя версия Sybase поддерживает синтаксис.
Я использую Hibernate 3.2 и Sybase ASE 15.0.2.