【问题标题】:jpa many to many inverse side cant perform merge operation after been cascadedjpa多对多反面级联后无法执行合并操作
【发布时间】:2013-11-02 07:59:58
【问题描述】:

我有两个实体类映射@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);但它没有 请帮忙

【问题讨论】:

    标签: jpa merge many-to-many


    【解决方案1】:

    您还应该从 Tag 实体中删除 User

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

    【讨论】:

      猜你喜欢
      • 2019-02-25
      • 2011-06-23
      • 2021-04-10
      • 1970-01-01
      • 2018-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多