JPA多对多逆侧在级联后无法执行合并操作



我有两个具有映射@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);
 }

它清除了许多用户与标签实体 t 的关系,我认为这有效,因为标签实体是欠侧,但是当我用反向侧执行此操作时;

 Users u = em.find(Users.class,id);
 u.getTagList().clear();
 em.merge(u);

它对表没有任何作用,我实际上希望代码清除许多标签 t 与一个用户 u 的关系,但我觉得由于这是通过添加 cascade=CascadeType.MERGE 的反面,将允许合并操作作为这个 em.merge(u); 但它没有请帮忙

还应该从实体中删除User Tag

Users u = em.find(Users.class,id);
{
    for (Tag t : u.getTagList())
    {
       t.hetUserList().remove(u);
    }
    u.getTagList().clear();
    em.merge(u);
}

最新更新