Я не могу удалить дочерний объект из базы данных. Из метода org.apache.struts.action.Action.execute()
я удаляю дочерний элемент из родительского List
, а также вызываю session.delete(child)
. Я упростил приведенный ниже код и включил в него только то, что считаю относительным.
Hibernate Mapping
<class
name="xxx.xxx.hibernate.Parent"
table="parent">
...
<list
name="children"
cascade="all,delete-orphan"
lazy="true"
inverse="true">
<key column="parent_id"/>
<index column="list_index"/>
<one-to-many class="xxx.xxx.hibernate.Child"/>
</list>
</class>
<class
name="xxx.xxx.hibernate.Child"
table="child">
...
<many-to-one
name="parent"
class="xxx.xxx.hibernate.Parent"
not-null="true"
column="parent_id" />
</class>
Выдержка из метода execute ()
Transaction tx = session.beginTransaction(); //session is of type org.hibernate.Session
try {
Parent parent = (Parent) session.get(Parent.class, getParentId());
Iterator i = form.getDeleteItems().iterator(); //form is of type org.apache.struts.action.ActionForm
while(i.hasNext()){
Child child = (Child) i.next();
session.delete(child);
parent.getChildren().remove(child); //getChildren() returns type java.util.List
}
session.saveOrUpdate(parent);
tx.commit();
} ...
Я пробовал только с session.delete(child);
и пробовал только с parent.getChildren().remove(child);
и с обеими строками, но все безуспешно. Там нет ошибок или выброшенных исключений или что-то в этом роде. Я уверен, что этот код вызывается (я даже использовал System.out.println();
для отслеживания происходящего), но база данных не обновляется. Я могу добавлять детей, используя подобный код, редактировать несобственные свойства существующих потомков, редактировать свойства родителя, все это работает, только не удаляя!
Согласно Hibernate FAQ Я правильно делаю отображение, и согласно этот ТАК вопрос У меня правильная логика. Я просмотрел весь интернет и, похоже, больше ничего не нашел.
Что я делаю не так? Пожалуйста помоги! Спасибо.
Примечания к версии
Все несколько лет:
- Java 1.4.2
- SQL Server 2005
- Hibernate 3.0.5
- Распорки 1.2.7
- Apache Tomcat 5.0.28