Я вижу поведение, которое выглядит так, как подсказка READPAST устанавливается в самой базе данных.SQL Server READPAST hint
The rub: Я не думаю, что это возможно.
У нас есть таблица foo (идентификатор первичного ключа id int, имя varchar (50), но не уникальное);
У меня есть несколько потоков, которые делают, в основном
id = select id from foo where name = ?
if id == null
insert into foo (name) values (?)
id = select id from foo where name = ?
Каждый поток отвечает за вставляя свое собственное имя (без двух потоков не пытаются вставить такое же имя, в то же время). Клиент - java.
READ_COMMITTED_SNAPSHOT ВКЛЮЧЕН, транзакционная изоляция специально настроена на ЧИТАТЬ, COMMITTED, используя Connection.setTransactionIsolation (Connection.TRANSACTION_READ_COMMITTED);
Признак состоит в том, что если один поток вставляет, другой поток не может видеть, что это строки с четными строками, которые были привязаны к базе данных до запуска приложения, - и пытается вставить, но получает дубликат-ключ- исключение из уникального индекса по имени.
Бросьте мне кость здесь?
несколько предложений, чтобы обернуть в сделке - Прости, что я забыл включить, что мы делаем это (через подключение # setAutocommit (ложь)) –
еще один момент - мы опускаем уникальный индекс по имени, и все работает. (Кроме того, мы не получаем повторяющиеся данные.) Это не может быть реальным решением. –