Я получаю ObjectOptimisticLockingFailureException
с пакетным обновлением, когда я использую драйвер Microsoft sqlserver (sqljdbc4.jar). Однако с тем же кодом, когда я переключаю драйвер на драйвер Jtds, я могу успешно выполнить пакетное обновление и вставку. мы используем базу данных sql server и JPA с Hibernate.
Вот что я делаю ниже.
Получить данные из базы данных с кодом состояния в виде SUBMITTED и
текущий флаг как Y.
Пакетное обновление записей до текущего флага N, и Пакетная вставка новой записи с новым статусом BATCH_LOCKED.
- Пакетное обновление вышеуказанных записей снова с текущим флагом N и пакетная вставка новой записи со статусом ЗАВЕРШЕНО.
Все эти обновления проходят нормально. Когда транзакция совершается, я получаю исключение ниже
Я специально не определяю Оптимистическую блокировку, и я не определил аннотацию @Version для какого-либо столбца. Как происходит оптимистическая блокировка по умолчанию?
Если я прокомментирую Шаг № 3, тогда я не получу исключение.
Почему я не получаю исключение с драйвером JTDS?
org.springframework.orm.ObjectOptimisticLockingFailureException: Batch
обновление вернуло неожиданное количество строк из обновления [1]; фактическая строка
количество: 0; ожидается: 1; вложенное исключение
org.hibernate.StaleStateException: пакетное обновление вернуло неожиданное
количество строк от обновления [1]; фактическое количество строк: 0; ожидается: 1