Dirty read в однопоточном приложении java
Есть два метода A() и B(), которые вызывают метод update(). Все методы @Transactional.
Приложение однопоточное, но столкнулся с проблемой что во время работы одной транзакции, вторая считывает данные старые (dirty read), ловил nested exception is org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect). Пробовал read committed, такая же ситуация. Использовал saveAndFlush для принудительного обновления данных, такая же ситуация. Дополнительно попробовал накинуть serializable уровень, теперь ловлю HHH000346: Error during managed flush [org.hibernate.exception.LockAcquisitionException: could not execute statement] это конечно же связано с тем, что отменяется обновление, которое в очереди, что можно сделать ?
Из вариантов было явный вызов exists перед методом update()
Ответы (1 шт):
Решил проблему используя lock(), слушатели паралельно пытались вызвать метод