1

このような単純なクエリの場合、休止状態で使用すると、DB2 は理由もなく SQL エラーをスローします。

休止状態のプロパティに対するDB2のすべての設定が正しいと思います。他のクエリが正常に実行されているためです。

    SQLException for SQL [/* criteria query */ 

        select this_.col1,this_.col2,this2_.col1,this2_.col3
           from TABLE this_ 
          left outer join TABLE1 this2_ 
          on this_.TAB1_ID=this2_.ID 
          where this2_.ID=?

   ]; SQL state [36001]; error code [-243]; could not execute query using scroll; nested exception is org.hibernate.exception.GenericJDBCException: could not execute query using scroll

IBM サイトを調べてみましたが、hsqldb でも同じテスト ケースが正常に機能するため、まったく役に立ちません。

注: Hibernate がクエリを生成します。クエリが生成されていません。

どんな助けでも本当に感謝しています。

ありがとうSridhar。

4

1 に答える 1

1

DB2 は、「センシティブ カーソル」と呼ばれる種類のカーソルを導入しました。これは、カーソルが開かれた後に行われたデータの (一部の) 変更を確認できるものです。代替は、「asensitive」および「insensitive」カーソル タイプです。

クエリが読み取り専用の結果セットを返す場合、これは、結果セットが実際のデータから切り離されているため、センシティブ カーソルがデータの変更を認識できないことを意味します。DB2 はエラー -243 を返し、要求された「機密性の高い」動作を満たすことができないことを知らせます。

クエリに結合が含まれているため、読み取り専用の結果セットが返されるため、エラーが発生します。

そのような機密性が必要ない場合 (たとえば、データを更新するつもりがない場合)、JDBC プロパティの cursorSensitivity を TYPE_SCROLL_ASENSITIVE (値 2 の int) に設定してみてください。このパラメーターは、次のように JDBC URL 文字列でコーディングできます。

jdbc:db2://hostname:port/dbname:cursorSensitivity=2;

詳細については、こちらを参照してください (または、実際の DB2 バージョンに対応するページを参照してください)。

于 2013-02-11T14:09:22.890 に答える