У меня есть отношение многие ко многим, когда две записи на одной стороне имеют одного и того же родителя (владельца отношения) на другой стороне. Когда я удаляю одну из двух записей, родительская и присоединяемая записи также удаляются. Я не хочу этого Я ожидаю, что родитель не будет удален, пока на другой стороне есть ребенок.
У меня есть следующие данные:
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 не будет удалена, потому что она не сирота. Что я делаю не так?