В моем коде я удаляю и сохраняю объекты в одной транзакции:
for (final GZAFixInterval actStat : actualStatus) {
...
em.remove(actStat);
...
}
for (final Interval newInterval : newIntervals) {
final GZAFixInterval newGZAfi = new GZAFixInterval();
... setters etc
em.persist(newGZAfi);
}
em.flush();
Иногда я получаю PSQLException: ОШИБКА: конфликтующее значение ключа нарушает исключающее ограничение "constraint_name". Это специальное исключающее ограничение.
Ситуация, когда возникает ошибка ограничения, выглядит следующим образом:
- em.remove (Objecta)
- em.persist (objectB)
objectA и objectB должны быть взаимно исключены из существующих в таблице (это ограничение). Может быть, объект А на самом деле не удален из БД перед вставкой объекта В.
Вопрос: если это так, как заставить JPA действительно удалить объект A перед вставкой объекта B? Может ли флеш решить это?
В настоящее время я играю с отложенными ограничениями, но любая идея может приветствоваться.