2011-08-05 49 views
1

我有一个多对多的关系,一方的两个记录有相同的父母(关系的所有者)另一边。当我删除两条记录中的一条时,父代和连接表记录也被删除。我不想要这个。我希望只要另一边有一个孩子,父母就不会被删除。多对多:'父'被删除时,还有另一个'孩子'

,我有以下数据:

Table A          
SID | NAME         
-----------------------    
90 | xyz          
-----------------------    
91 | abc         

Table AB          
A_SID | B_SID 
-----------------------    
90  | 5          
-----------------------    
91  | 5        

Table B          
SID | NAME 
-----------------------    
5 | lala               

这是Hibernate映射

mapping of class A on table A: 
<hibernate-mapping ... 

     <set name="setOfBs" table="AB" inverse="true" cascade="delete-orphan"> 
      <key column="A_SID" not-null="true" /> 
      <many-to-many column="B_SID" class="B"/> 
     </set> 
... 
</hibernate-mapping> 

mapping of class B on table B: 
<hibernate-mapping ... 

     <set name="setOfAs" table="AB" lazy="false"> 
      <key column="B_SID" not-null="true" /> 
      <many-to-many column="A_SID" class="A"/> 
     </set> 
... 
</hibernate-mapping> 

我删除与SID“90”,名称为“XYZ”我的数据看起来像这样的对象后:

05/08/2011 07:29:43,259 [DEBUG] SQL - delete from AB where B_SID=? 
05/08/2011 07:29:43,259 [TRACE] BasicBinder - binding parameter [1] as [BIGINT] - 5 
05/08/2011 07:29:43,264 [DEBUG] SQL - delete from B where SID=? and OBJECT_VERSIE=? 
05/08/2011 07:29:43,265 [TRACE] BasicBinder - binding parameter [1] as [BIGINT] - 5 
05/08/2011 07:29:43,265 [TRACE] BasicBinder - binding parameter [2] as [BIGINT] - 0 
05/08/2011 07:29:43,275 [DEBUG] SQL - delete from A where SID=? and OBJECT_VERSIE=? 
05/08/2011 07:29:43,275 [TRACE] BasicBinder - binding parameter [1] as [BIGINT] - 90 
05/08/2011 07:29:43,275 [TRACE] BasicBinder - binding parameter [2] as [BIGINT] - 0 



Table A          
SID | NAME         
-----------------------       
91 | abc         

Table AB          
A_SID | B_SID 
-----------------------          

Table B          
SID | NAME 
----------------------- 

我认为表B中的记录不会被删除,因为它不是孤儿。我究竟做错了什么?

回答

0

在A实体中使用此 private List Bs = new ArrayList(0);

@ManyToMany(cascade = CascadeType.REFRESH, fetch = FetchType.EAGER) 
@JoinTable(name = "AB", joinColumns = { @JoinColumn(name = "A", nullable = false, updatable = false) }, inverseJoinColumns = { @JoinColumn(name = "B", nullable = false, updatable = false) }) 
public List<B> getBs() { 
    return this.Bs; 
} 

public void setBs(List<B> Bs) { 
    this.Bs = Bs; 
} 
相关问题