質問: null) { break; } // UPDATE処理を行う update(recordId); // 処理が成功したなら都度コミット sqlMapClient.commitTransaction(); } } finally { // 成功/失敗に関わらず、トランザクションの終了 sqlMapClient.endTransaction(); // 無事ループを抜けたならカーソルを閉じる closeCursor(); } } } ``` ### 試したこと トランザクションを別々にせずに、同じトランザクション内で処理を行えば、カーソルでの処理はできました。 しかし、件数が多すぎるとUPDATE処理にすごく時間がかかり、あまりよろしくありません(テーブルの列が10個で1レコード40msぐらい、1万レコードだと400sかかる)。 UPDATE処理は別のトランザクションで処理した方が速いというのはこれまでの試験でわかっており(1レコード15msくらい)、どうしても別々のトランザクションで処理を行いたいと考えています。 ### 補足情報(FW/ツールのバージョンなど) ここにより詳細な情報を記載してください。
回答: SqlMapClientをもう一つ作ればいいのでは? > > final SqlMapClient sqlMapClientUpdate = baseDao.getSqlMapClient(); > > > updateメソッドで使うSqlMapClientを上記のインスタンスにすると おそらくcursorとは別トランザクションになると思います。 updateメソッドの引数から推測するに、特にcursorが必要ではなさそうなので。 ただトランザクションを分けても処理が早くなる気はしないのですが、、、 たぶんトランザクションの開始終了が多すぎるのが問題のような気がします。 update処理が一行毎に行われるので、それで少なくとも3回DBにアクセスすることになります。