2016-12-20 2 views
1

Если я сделать вызов, как это в Java коде:Когда я устанавливал уровень изоляции транзакций в коде, он применяется в коде или в СУБД?

connection.setTransactionIsolation (Connection.TRANSACTION_REPEATABLE_READ);

это принудительное исполнение в коде, посредством блокировок на уровне таблицы/строки на уровне СУБД или любого из них в зависимости от реализации драйвера JDBC?

Спасибо!

+1

Это должно быть 'Connection.TRANSACTION_REPEATABLE_READ' не' Connection.READ_REPEATABLE' –

ответ

2

Уровень изоляции обеспечивается механизмом базы данных, а не кодом приложения.

Это хороший ресурс по этому вопросу, если вы заинтересованы. Isolation Levels

+0

Как вы знаете, что Ян использует SQL Server? –

+1

Я этого не делаю, но это на самом деле не меняет ответа, и предлагать больше информации по этому вопросу не повредит. –

0

Вы используете API JDBC, которые полагаются на базовой реализации драйвера JDBC, которые полагаются на нижележащих RDBMS:

драйвер JDBC не может поддерживать все уровни изоляции транзакций. Если драйвер не поддерживает уровень изоляции, указанный при вызове setTransactionIsolation, драйвер может заменить более высокий и более ограничительный уровень изоляции транзакции. Если драйвер не может заменить более высокий уровень транзакции, он выдает SQLException. Используйте метод DatabaseMetaData.supportsTransactionIsolationLevel, чтобы определить, поддерживает ли драйвер данный уровень.

Если вы используете JTA API, вы будете полагаться на базовую реализацию, выполняющую контракт JCA. Контракт также будет реализован СУРБД в случае ресурса реляционных баз данных, но определенно может быть реализован по-разному (например, с использованием кода) для ресурса другого типа (например, JMS).