Доброго времени суток! Столкнулся со следующей проблемой. Есть сущность Событие:
| Код | @Entity @Table(name="JTMEvent") public class Event implements Serializable { private static final long serialVersionUID = 1L;
// ...
@ManyToOne @JoinColumn(name = "ParentEventRef") private Event parent;
@OneToMany(mappedBy = "parent", cascade={CascadeType.REMOVE, CascadeType.PERSIST}) private Collection<Event> subEvents;
// ... }
|
Бин, реализующий управление событиями
| Код | @Stateless public class EventsManagerBean implements EventsManager { @PersistenceContext private EntityManager em;
public void dropEvent(String eventId) throws InvalidParametersException { Event event = em.find(Event.class, eventId); if (event == null) { throw new InvalidParametersException("Event " + eventId + " wasn't found"); }
em.remove(event); } }
|
В результате выполнения этого метода возникает ошибка JDBC-драйвера используемой бд: Dependent foreign key constraint violation in a referential integrity constraint. Это происходит в случае, когда удаляемое событие содержит "под-события", хотя по идее CascadeType.REMOVE должен обеспечить и их удаление тоже.
Сервер - Glassfish 2.x, провайдер - TopLink.
Есть подозрение, что проблема каким-то образом связана с кешированием в TopLink, т.к. при его отключении такой проблемы не возникает.
Какие мысли по поводу?
|