【发布时间】:2021-10-24 04:03:26
【问题描述】:
我有 2 个具有 @ManyToMany 关系的实体。如果users 字段为空,我想在删除User 的同时删除Activity。
@Entity
public class User {
...
@ManyToMany(mappedBy="users")
private List<Activity> activities;
}
和
@Entity
public class Activity {
@ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH, CascadeType.DETACH})
@JoinTable(name = "USER_ACTIVITY",
joinColumns = @JoinColumn(name = "ACTIVITY_ID"),
inverseJoinColumns = @JoinColumn(name = "USER_ID"))
private List<User> users;
}
例如删除前有以下记录
USERS
id name
----+-------
1 user1
2 user2
3 user3
ACTIVITY
id name
----+-------
1 act1
2 act2
3 act3
USER_ACTIVITY
USER_ID ACTIVITY_ID
---------+-------
1 1
2 1
2 2
3 1
3 3
2 3
1 3
如果user2 被删除,那么act2 也应该被删除。因为它没有更多的用户。所以删除 user2 后的记录应该如下所示:
USERS
id name
----+-------
1 user1
3 user3
ACTIVITY
id name
----+-------
1 act1
3 act3
USER_ACTIVITY
USER_ID ACTIVITY_ID
---------+-------
1 1
3 1
3 3
1 3
【问题讨论】:
标签: hibernate many-to-many cascading-deletes