многие-ко-многим: «родитель» удаляется, когда есть еще один «ребенок» - PullRequest
1 голос
/ 05 августа 2011

У меня есть отношение многие ко многим, когда две записи на одной стороне имеют одного и того же родителя (владельца отношения) на другой стороне. Когда я удаляю одну из двух записей, родительская и присоединяемая записи также удаляются. Я не хочу этого Я ожидаю, что родитель не будет удален, пока на другой стороне есть ребенок.

У меня есть следующие данные:

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

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

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

А это отображение спящего режима

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 не будет удалена, потому что она не сирота. Что я делаю не так?

1 Ответ

0 голосов
/ 30 марта 2014

используйте это в A Entity приватный список 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...