2

結果が限定された単純な Hibernate クエリを実行する次の 2 つの方法のいずれも、Sybase では機能しません。どちらもSybSQLException: Incorrect syntax near '@p0' という結果になります。

Query q = session.createQuery( "from Record" );
q.setMaxResults( 50 );
q.list();

また

Criteria criteria = session.createCriteria( Record.class );
criteria.setMaxResults( 50 );
criteria.list();

これらの両方のケースで生成された実際の SQL は次のように見えます...

select top ? record_id, etc...

そして、Sybase は ? をためらっていますが、Hibernate は値 50 を入力していません (これは私の推測です)。私はどこでも検索しましたが、他の人も同様のエラーに遭遇しましたが、結果を制限しようとしたためではありません.

「select top 50 from Record」などの直接 SQL ステートメントを実行でき、それは完全に機能するので、使用しているバージョンの Sybase がその構文をサポートしていることはわかっています。

Hibernate 3.2 と Sybase ASE 15.0.2 を使用しています

4

4 に答える 4

6

おそらく、間違ったSQLダイアレクトを使用するようにHibernateを構成しました。

HSQLDialectを生成できる唯一の方言のように見えますがlimit ? ?、Sybaseにとっては間違いなく間違った選択です。

参照:

于 2011-01-26T19:05:39.793 に答える
0

setMaxResults()setFirstResult()通常、ページングを実装するために と一緒に使用されます。例えば。最初のクエリは 1 から 1000 までのレコードを返し、2 番目のクエリは 1001 から 2000 までを返します。合わせて使ってみてください。

setFetchSize()JDBC ドライバーによって一度にフェッチされる行数を制御します (実装されている場合)。したがって、たとえば setMaxResults(1000) と setFetchSize(100) がある場合、クエリは 1000 行を超えず、バッチでそれを返します。一度に 100 行。

于 2011-01-26T17:58:43.117 に答える
0

TOPで動作するcreateSQLQueryオプションを使用できます。

于 2011-02-01T17:18:21.397 に答える
0

setFirstResult(1) 同様に入れてみてください:

Criteria criteria = session.createCriteria(Record.class);
criteria.setFirstResult(1);
criteria.setMaxResults(50);
criteria.list();

それでも同じエラーが発生しますか?

于 2011-01-26T17:51:54.767 に答える