Я понимаю, что это довольно распространенная проблема с Hibernate, однако я все еще изо всех сил пытаюсь написать код, который функционирует правильно. В принципе, у меня есть два класса; Демографический и NextOfKin. Более поздняя часть связана с демографическим набором «один-ко-многим». Упрощенная:Hibernate Удаление членов набора в одном для многих отношений
<hibernate-mapping>
<class name="entities.Demographic" table="Demographics">
<id name="id" type="long" column="Id" ><generator class="identity"/></id>
<set name="nextOfKinList" table="NextOfKin" inverse="true" lazy="true" fetch="select" cascade="all,delete-orphan" >
<key><column name="DemographicId" not-null="true" /></key>
<one-to-many class="entities.NextOfKin" />
</set>
</class>
</hibernate-mapping>
<hibernate-mapping>
<class name="entities.NextOfKin" table="NextOfKin">
<id name="id" type="long" column="Id" ><generator class="identity"/></id>
<many-to-one name="demographic" class="entities.Demographic" fetch="select">
<column name="DemographicId" not-null="true" />
</many-to-one>
</hibernate-mapping>
код, который я пытаюсь использовать удалить список NextOfKin следующим образом - снова упрощается:
try {
DAOFactory factory = DAOFactory.instance(DAOFactory.HIBERNATE);
HibernateUtil.beginTransaction();
Demographic demographic = factory.getDemographicDAO().findDemographic();
if (!demographic.getNextOfKinList().isEmpty()) {
for (Iterator<NextOfKin> iterator = demographic.getNextOfKinList().iterator(); iterator.hasNext();) {
NextOfKin nextOfKin = iterator.next();
factory.getNextOfKinDAO().delete(nextOfKin);
iterator.remove();
}
}
demographic.setNextOfKinList(nextOfKinList);
HibernateUtil.commitTransaction();
}
catch (Exception e) {
e.printStackTrace();
HibernateUtil.rollbackTransaction();
}
finally {
HibernateUtil.closeSession();
}
Я попробовал несколько подходов, но все потерпели неудачу либо оставляя отношения нетронутыми или с текущим, например, бросание исключение:
org.hibernate.HibernateException: A collection with cascade="all-delete-orphan" was no longer referenced by the owning entity instance: entities.Demographic.nextOfKinList
Извинения, как это довольно стандартный вопрос, но любая помощь будет оценена.
Perfect - спасибо – skyman