Hibernate setMaxResults()不适用于Sybase数据库查询

Joe*_*ner 2 sql hibernate hql sybase-ase

执行具有有限结果的简单Hibernate查询的以下两种方法之一在Sybase中不起作用.它们都会导致SybSQLException:'@ p0'附近的语法不正确.

Query q = session.createQuery( "from Record" );
q.setMaxResults( 50 );
q.list();
Run Code Online (Sandbox Code Playgroud)

要么

Criteria criteria = session.createCriteria( Record.class );
criteria.setMaxResults( 50 );
criteria.list();
Run Code Online (Sandbox Code Playgroud)

看来在这两种情况下生成的实际SQL看起来像......

select top ? record_id, etc...
Run Code Online (Sandbox Code Playgroud)

并且Sybase正在讨论?,Hibernate没有填充值50(这是我的猜测).我到处搜索,而其他人遇到了类似的错误,这不是因为试图限制结果.

我可以执行一个直接的SQL语句,例如'从Record中选择前50个',它运行得很好,所以我知道我的Sybase版本支持语法.

我正在使用Hibernate 3.2和Sybase ASE 15.0.2

axt*_*avt 6

也许您将Hibernate配置为使用错误的SQL方言.

它看起来HSQLDialect是唯一可以产生的方言,limit ? ?对于Sybase来说它绝对是一个错误的选择.

也可以看看: