2016-12-20 10 views
1

私はJavaコードでこのような呼び出しにする場合:コードでトランザクション分離レベルを設定すると、コード内またはDBMS内で強制されますか?

connection.setTransactionIsolation(Connection.TRANSACTION_REPEATABLE_READを)。

このコードは、DBMSの表/行レベルのロック、またはJDBCドライバの実装に依存するものですか?

ありがとうございます!

+1

'Connection.TRANSACTION_REPEATABLE_READ'は' Connection.READ_REPEATABLE'ではありません –

答えて

2

分離レベルはアプリケーションコードではなくデータベースエンジンによって強制されます。

あなたが興味を持っている場合、ここには良いリソースがあります。 Isolation Levels

+0

JanはSQL Serverをどのように使用しているのですか? –

+1

私はそうではありませんが、それは本当に答えを変えるものではなく、被験者に関するより多くの情報を提供することは傷つけません。 –

0

あなたは基礎となるRDBMSに依存している基礎となるJDBCドライバの実装に依存しているJDBC APIを使用している:

A JDBCドライバは、すべてのトランザクション分離レベルをサポートしていない可能性がありますが。ドライバがsetTransactionIsolationの呼び出しで指定された分離レベルをサポートしていない場合、ドライバは、より高い、より制限の厳しいトランザクション分離レベルで置き換えることができます。ドライバがより高いトランザクションレベルを代用できない場合は、SQLExceptionをスローします。 DatabaseMetaData.supportsTransactionIsolationLevelメソッドを使用して、ドライバが特定のレベルをサポートしているかどうかを判断します。

JTA APIを使用している場合、JCA契約を満たす基本的な実装に依存します。リレーショナルデータベースリソースの場合には、RDBMSによって契約が実装されるが、別のタイプのリソース(例えば、JMSなど)に対して異なる実装(例えば、コードを使用)することは間違いない。

関連する問題