Sto provando diversi livelli di isolamento per la mia applicazione a causa di un problema con gli aggiornamenti simultanei. Ho impostato il livello di isolamento attraverso un DataSource da cui ho la connessione al databaseImpostazione del livello di isolamento della transazione per H2 tramite un DataSource
BasicDataSource ds = new BasicDataSource();
ds.setDefaultTransactionIsolation(
Connection.TRANSACTION_REPEATABLE_READ)
/* more config ... */
ds.getConnection()
Con Postgres 9.3 del database, gli aggiornamenti simultanei sulle righe genera un errore, che si prevede e secondo la documentazione postgres sul Standard SQL Transaction Isolation Levels
ERROR: could not serialize access due to read/write dependencies among transactions
Questo errore si annulla come previsto quando si imposta il livello di isolamento su Connection.TRANSACTION_READ_COMMITTED
Provando a riprodurre questo comportamento con un database di memoria H2, i livelli di isolamento non sembrano modificare il risultato della mia richiesta. Anche con la disattivazione di isolamento del tutto con l'impostazione dell'URL database con LOCK_MODE=0 e/o Connection.TRANSACTION_READ_UNCOMMITTED
ricevo errori sul aggiornamenti simultanei org.h2.jdbc.JdbcSQLException: Concurrent update in table "MyTable": another transaction has updated or deleted the same row
La mia domanda sarebbe: Come faccio a configurare la connessione H2 di utilizzare un livello di isolamento specifica, nessuno dei miei cambiamenti alla modalità di blocco o alla connessione mi aiuta a sbarazzarmi della JdbcSQLException.
hmm, "non puoi usare H2 per quello" non è proprio la risposta che speravo :) – globalworming