Спящий режим: не удается удалить родительский объект в двунаправленной ассоциации

#hibernate

#переход в спящий режим

Вопрос:

У меня есть двунаправленная связь между двумя таблицами, родительской и дочерней

 <class name="child" table="child">
      <id name="id" column="id" />
      <many-to-one name="parent_id" column="parent_id" 
                          class="parent" cascade="save-update"/>
</class>

<class name="parent" table="parent">
     <id name="id" column="id" />
     <set name="children" inverse="true" cascade="delete" >
         <key column="parent_id" />
         <one-to-many class="child" />
     </set>
</class>
  

Я просто получаю SQLIntegrityConstraintViolationException при попытке удалить родительский объект.

Как я могу заставить спящий режим удалять для меня все дочерние элементы, связанные с родителем, при удалении этого родителя?

Ответ №1:

Вы можете удалить дочерние объекты, используя опцию удаления сирот в вашем сопоставлении. Это описано здесь. Это работает, потому что срок службы дочерних элементов ограничен сроком службы родительского объекта. Спящий режим знает, что он должен удалять дочерние объекты при удалении родительского и, следовательно, избегает нарушения ограничения. Т.е. он удаляет дочерние объекты, а затем родительский. Без этого вы можете ожидать нарушения ограничения.

Комментарии:

1. Не могли бы вы отметить это как правильный ответ, тогда, пожалуйста 🙂 Спасибо!