2011-11-09 111 views
0

我得到了很奇怪的情况。 我有A类和B关系多对多这样的:ManyToMany关系删除行

的A.class:

@ManyToMany 
    @JoinTable(name="a_b", 
      joinColumns={ 
       @JoinColumn(name="a_id") 
     }, inverseJoinColumns={ 
      @JoinColumn(name="b_id") 
    } 
    ) 
private List<B> blist; 

B.class:

@ManyToMany 
     @JoinTable(name="a_b", 
       joinColumns={ 
        @JoinColumn(name="b_id") 
      }, inverseJoinColumns={ 
       @JoinColumn(name="a_id") 
     } 
     ) 
    private List<A> alist; 

当我更新类的实例时,Hibernate会删除所有关系('从a_b where删除a_id =?) 在我的数据库中,我没有级联类型的规则。 这种情况的原因是什么?

回答

0

我能想到的唯一的事情是,你正在使用保存并没有SaveOrUpdate。是这样吗?类注释看起来很好,还有其他的东西导致了这个问题。你能发布更多信息吗?

0

我认为问题是,你不指定级联型。缺省值为CascadeType.None,因此父ID改变的更新不会传播给子代,因此Hibernate将删除孤儿。我相信,所以你需要指定你的属性如下:

@ManyToMany(cascade = CascadeType.ALL) //Use whatever CascadeType fits your need 
0

尝试用以下映射

的A.class

@ManyToMany(targetEntity = B.class) 
@JoinTable(name = "a_b", 
     joinColumns = @JoinColumn(name = "a_id"), 
     inverseJoinColumns = @JoinColumn(name = "b_id")) 
private List<B> blist; 

B.class

@ManyToMany(mappedBy = "blist", targetEntity = A.class) 
private List<A> alist;