Я вызываю метод SLSB, транзакция которого контролируется контейнером. В методе я пытаюсь удалить объект и создать новыйEJB Непонимание сделок
List<FactPlan> factPlans = factPlanFacadeLocal.findAll();
for (FactPlan factPlan : factPlans) {
factPlanFacadeLocal.remove(factPlan);
}
FactPlan factPlan = new FactPlan(12264L, 12088L);
factPlanFacadeLocal.create(factPlan);
И я следующее исключение
Caused by: org.postgresql.util.PSQLException: ERROR: duplicate key value violates unique constraint "pkfact_plan"
Detail: Key (fact_id, plan_id)=(12264, 12088) already exists.
Что я делаю неправильно?
UPD: реализация JPA является EclipseLink
Ну, ошибка говорит все, в таблице 'fact_plan' уже существует запись с идентификатором, которую вы вручную назначает новый объект. Если этот идентификатор принадлежит одному из сущностей, которые вы удалили, попробуйте сделать flush в диспетчере сущностей в методе 'remove' класса' FactPlanFacade' ('em.flush()'). – Geinmachi
@Geinmachi, Да, я понимаю, что говорит ошибка. Я удаляю все записи в таблице fact_table перед вставкой, я показал это в своем коде. Я назначил эти идентификаторы вручную, просто для иллюстрации проблемы с этим выходом. Вопрос в том, что, несмотря на транзакции методов, контролируемые контейнером, я должен делать commit/flushes вручную? – Bagdat