У меня есть приложение, которое асинхронно сохраняет данные в БД. Теперь проблема в том, что если в полезной нагрузке есть дубликаты (один и тот же идентификатор) или приложение получает несколько полезных данных (одинаковый идентификатор) для нескольких экземпляров, Hibernate создает вставку для них обоих. и тот, который был получен позже, выбрасывает DataIntegrityViolationException, поскольку идентификатор уже присутствует. Существует @retryable
, который повторяет второй раз, Hibernate создает оператор обновления, а второй полезный груз обновляет существующую запись.
Как избежать исключения.
Я пробовал также @Transactional
и @Lock(LockModeType.PESSIMISTIC_WRITE)
. но это не сработало. Я использую Spring JPA и @Async
[{"id":1, "name":"abc"}, {"id":1, "name":"efg"}]