JPA удаляет запросы во многих отношениях

У меня есть две сущности (человек и событие). Персона и Событие связаны в двух разных отношениях, а именно:

Человек:

...

@OneToMany(fetch = FetchType.EAGER,cascade=CascadeType.ALL,mappedBy="person")
//@JoinColumn(name="idEvent",referencedColumnName="idEvent",insertable=true,updatable=true)
private List<Event> event;

@ManyToMany(mappedBy="participants", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JsonIgnore
private List<Event> eventsPart;

...

Событие:

...

@ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name="event_id")
private Person person;

@ManyToMany(fetch=FetchType.EAGER, cascade={
        CascadeType.DETACH,
        CascadeType.MERGE,
        CascadeType.REFRESH,
        CascadeType.PERSIST})
@JoinTable(
          name="event_participants",
          joinColumns=@JoinColumn(name="event_id", referencedColumnName="idEvent"),
          inverseJoinColumns=@JoinColumn(name="person_id", referencedColumnName="idPerson"))
private List<Person> participants;

...

Я не уверен, что эти отношения верны. Идея состоит в том, что Person может создавать N событий (отношение OneToMany), а также может быть участником других событий, созданных другими людьми (отношение ManyToMany). Проблема в том, что когда владелец события "удаляет" событие, оно будет удалено только в том случае, если Персона отсутствует в списке участников. Он будет удален только в том случае, если список участников пуст. Если я попытаюсь использовать "CascadeType.REMOVE" в списке участников события, он, очевидно, удалит также все сущности "Персона" в списке (и это не то поведение, которое я ищу). Я хочу иметь возможность удалить событие в любом случае (но без удаления сущностей Person в списке). Например, если существует событие с N сущностями "Персона", которые участвуют в событии, и владелец удаляет событие, будет удалено только событие, а также сопоставления в таблицах соединения (но не сущности Персоны). Любая помощь приветствуется.

0 ответов

Другие вопросы по тегам