JPA: ограничение во многих отношениях - PullRequest
0 голосов
/ 01 января 2012

У меня есть две сущности: Пользователь и Событие.У каждого пользователя есть список событий, на которые он обращает внимание.

@Entity
@Table(name = "user")
public class User {
    @Id
    @Column(name = "login", length = 64)
    protected String login;

    @ManyToMany
    @LazyCollection(LazyCollectionOption.FALSE)
    @JoinTable(name = "user_events",
        joinColumns = {@JoinColumn(name = "login") },
        inverseJoinColumns = {@JoinColumn(name = "event_id") })
    protected List<Event> events;
}

@Entity
@Table(name = "events")
public class Event extends BaseEntity {
    @Id
    @Column(name = "event_id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    protected Long eventId;
}

Но когда пользователь обращает внимание на событие, я не могу удалить это событие из базы данных.Кажется, есть некоторые ограничения, установленные JPA.Может кто-нибудь сказать мне, как это исправить?Заранее спасибо.

1 Ответ

2 голосов
/ 02 января 2012

Th ограничение не установлено JPA.Он находится в вашей базе данных: столбец соединения event_id в таблице соединений является внешним ключом для идентификатора события.Вы не можете удалить событие, потому что какой-то пользователь все еще ссылается на него.

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

String jpql = "select u from User u inner join u.events e where e.id = :eventId;
// execute the query
for (User u : users) {
    u.removeEvent(eventToDelete);
}
em.remove(eventToDelete);
...