2016-02-03 24 views
5

同時更新に関する問題のため、アプリケーションに対して異なる分離レベルを試行しています。私はPostgresの9.3データベースとデータベース接続データソース経由でH2のトランザクション分離レベルを設定する

BasicDataSource ds = new BasicDataSource(); 
ds.setDefaultTransactionIsolation(
    Connection.TRANSACTION_REPEATABLE_READ) 
/* more config ... */ 
ds.getConnection() 

を取得し、そこからデータソースを通じて分離レベルを設定し、行の同時更新がStandard SQL Transaction Isolation Levels
ERROR: could not serialize access due to read/write dependencies among transactions上とPostgresのマニュアルに従って、期待されたエラーを、トリガーインメモリデータベースH2でこの現象を再現しようとするとConnection.TRANSACTION_READ_COMMITTED

に分離レベルを設定すると、期待どおり このエラーが消滅、分離レベルは、私のユニットテストの結果を変更していないようです。でもLOCK_MODE=0および/または私は同時更新org.h2.jdbc.JdbcSQLException: Concurrent update in table "MyTable": another transaction has updated or deleted the same rowにエラーが発生しますConnection.TRANSACTION_READ_UNCOMMITTEDとデータベースのURLを設定すると完全に隔離を無効にして

私の質問は次のようになります。どのように私は、特定の分離レベルを使用するようにH2の接続を設定します、私の変化のどれもロックモードまたは接続に私はJdbcSQLExceptionを取り除くのに役立ちます。

答えて

0

マルチスレッド環境ではH2は動作していません。開発目的などに使用できますが、スレッド化された負荷の高い環境では、フル機能のDBMSのインスタンスを使用する必要があります。

+0

hmm、「あなたはH2を使用できません」という答えは本当に私が望む答えではありません:) – globalworming

関連する問題