Повторная попытка после ошибки базы данных вызывает исключение HibernateJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Повторная попытка после ошибки базы данных вызывает исключение Hibernate

Сообщение Anonymous »

При высокой степени параллелизма приложение активирует уникальные ограничения при сохранении новых данных. Таким образом, у нас есть механизм повтора для повторного получения данных из БД, и если данные уже присутствуют, мы не будем сохранять их снова.
Но в логике повтора при попытке получить данные из postgresDB мы получаем следующую ошибку:

ОШИБКА: HHH000099: произошел сбой утверждения (это может указывать на ошибку в Hibernate, но, скорее всего, связано с небезопасным использованием сеанса): org.hibernate.AssertionFailure : нулевой идентификатор в записи io.cred.rj.demo.entity.Merchant (не очищать сеанс после возникновения исключения)

Повторная попытка работала изначально, но теперь всегда получаю ошибку сбоя утверждения.
Я пытался перехватить конкретное исключение, а также выполнить откат, если произошло нарушение целостности данных. Но после исключения uniqueconstraint каждый раз при извлечении БД возникает ошибка AssertionFailure при переходе в спящий режим.
Пример кода:
public void cleanseMerchant(Merchant description, String mcc) {

try {
updateOrAddMerchant(description,mcc );
}catch(Exception e) {
//Retrying again
updateOrAddMerchant(description,mcc );
}
}

public void updateOrAddMerchant(Merchant description, String mcc) {
Merchant merchant=merchantDao.findByDescAndMcc(description,mcc);
if(merchant == null) {
Merchant merchant = new Merchant();
merchant.setMerchantDesc(description);
//set other fields
merchantDao.save(merchant);
}else {
updateMerchantInfo();
}
}


Подробнее здесь: https://stackoverflow.com/questions/786 ... -exception
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»