我有两个带有映射@ManytoMany 的实体类
Inverse Side
public class Users implements Serializable {
@ManyToMany(mappedBy = "usersList",cascade=CascadeType.MERGE)
private List<Tags> tagsList = new ArrayList();
Owning Side
public class Tags implements Serializable {
@JoinTable(name = "USERS_TAG_XREF", joinColumns = {
@JoinColumn(name = "TAG_ID", referencedColumnName = "TAG_ID")}, inverseJoinColumns = {
@JoinColumn(name = "USER_ID", referencedColumnName = "USER_ID")})
@ManyToMany
private List<Users> usersList = new ArrayList();
现在,当我像这样在拥有方执行操作时;
for(Tags t : tList){
Users u = em.find(Users.class, id);
t.getUsersList().clear();
em.merge(t);
}
它清除了许多用户 U 与标签实体 t 的关系,我认为这是有效的,因为标签实体是欠方,但是当我用反方执行此操作时;
Users u = em.find(Users.class,id);
u.getTagList().clear();
em.merge(u);
它在桌子上没有做任何事情,我实际上希望代码清除与一个用户 u 的许多标签 t 关系,但我觉得因为这是相反的一面,通过添加 cascade=CascadeType.MERGE 将允许合并操作,因为这个 em.merge (u);但这无济于事