Объединение удалять-висячей-строки с, где условие

Будьте в спящем режиме отображая вопрос, где поведение неоднозначно и/или опасно. У меня есть связь "один ко многим", которая имеет условие висячей строки каскадного удаления И где условие ограничить объекты в наборе. Отображение здесь -

<hibernate-mapping>
 <class name="User" table="user" > 

  <!-- properties and id ... -->

   <set table="email" inverse="true" cascade="all,delete-orphan" where="deleted!=true">
      <key column="user_id">
      <one-to-many class="Email"/>
   </set>

 </class>
</hibernate-mapping>

Теперь предположите, что это, у меня есть Пользовательский объект, который связан с одним или несколькими почтовыми объектами, по крайней мере один из которых имеет 'истинное' значение для удаленного свойства. Какой из следующих двух произойдет, когда я назову session.delete () на Пользовательском объекте?

  1. Пользователь и все почтовые объекты, включая тех, которые имеют deleted=true, удалены
  2. Пользователь и почтовые объекты, которые удалены! =null удалены.

С одной стороны, сценарий 1), игнорирует, где условие, которое не может быть корректным согласно модели предметной области. НО в сценарии 2), если родитель удален, и существует ограничение внешнего ключа на ребенка (электронная почта) ключ соединения таблицы, то удалить команда перестанет работать. Который происходит и почему? Это - просто другой пример того, как функции Hibernate могут быть неоднозначными?

5
задан Pascal Thivent 12 August 2010 в 22:12
поделиться