jdbcManager.deleteBatch(entities).execute()での楽観的排他制御ができない。

AbstractAutoBatchUpdate#executeInternal()のなかで実行結果の件数を元にvalidateRows()で更新件数が0の時は楽観的排他ロックのエラーとしてるんだけど、OraclejdbcではどうもexecuteBatchの戻り値としてSUCCESS_NO_INFO(-2)が返ってきてて、件数が正しく取得できてないのでこんな事に。

取りあえず明日もう一度検証

  • jdbcのドライバをデータベースのバージョンと併せてみる。(jdbc=ojdbc6、db=OracleXE)
    • jdbcOracleXEにバンドルされている物を使ってもNG
  • OracleXEじゃなくてまじめな方でも試してみる
    • 11gでもNG
  • OracleでないDBMS(PostgreSQL辺り?)で試してみる


2008/07/25 11:59 追記
executeBatch()では更新件数が正しく取得できないのは既知みたい。
更新件数取得するにはPreparedStatement#getUpdateCount()でらしい。

via http://otn.oracle.co.jp/forum/message.jspa?messageID=11005850