我有两个实体:用户和事件。每个用户都有他注意的事件列表。
@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设定了一些限制。谁能告诉我如何解决这个问题?提前谢谢。
答案 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);