JPA:ManyToMany关系的限制

时间:2012-01-01 19:29:36

标签: database hibernate jpa

我有两个实体:用户和事件。每个用户都有他注意的事件列表。

@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 个答案:

答案 0 :(得分:2)

JPA未设置限制。它位于您的数据库中:连接表中的event_id连接列是事件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);