Вот моя ситуация: я загружаю объект, который содержит двунаправленные родительские дочерние отношения в мою базу данных. Позже этот объект загружается в мой пользовательский интерфейс, где можно вносить изменения, включая удаление любого числа дочерних элементов из дочернего набора. Эта измененная копия моего объекта затем загружается с помощью метода saveOrUpdate. Однако при сохранении этой измененной копии все удаленные дочерние элементы остаются в базе данных (новые дочерние элементы, добавляемые в набор, работают нормально). В течение этого процесса не выдается никаких ошибок, но мне нужно, чтобы эти удаленные потомки действительно были удалены из базы данных. Я вставил соответствующие части моего спящего и java-кода ниже.
Конфигурация родительского режима гибернации:
<bag name="specimenTypes" table="masterPkSpecimenType" cascade="all-delete-orphan" inverse="true">
<key column="runid"/>
<one-to-many class="SpecimenType"/>
</bag>
Конфигурация дочернего спящего режима:
<many-to-one name="reportCriteriaBean" class="ReportCriteriaBean" column="runid" not-null="true" />
Код родительского объекта:
public List<SpecimenType> getSpecimenTypes() {
return specimenTypes;
}
public void setSpecimenTypes(List<SpecimenType> specimenTypes) {
this.specimenTypes = specimenTypes;
if(this.specimenTypes != null){
for(SpecimenType specType : this.specimenTypes){
specType.setReportCriteriaBean(this);
}
}
}
Код дочернего объекта:
public ReportCriteriaBean getReportCriteriaBean() {
return reportCriteriaBean;
}
public void setReportCriteriaBean(ReportCriteriaBean reportCriteriaBean) {
this.reportCriteriaBean = reportCriteriaBean;
}
EDIT:
Очевидно, моя проблема связана с явным вызовом setSpecimenTypes () после того, как я извлекаю родительский объект из БД, и перед тем, как сохранить обновленный объект обратно. причина, по которой я это делаю, заключается в том, что из-за некоторой динамической привязки List, мне нужно, чтобы List был конкретной реализацией List (в частности, LazyList apache), когда он представлен в пользовательском интерфейсе. Однако, когда объект извлекается из БД, он не реализуется таким образом, поэтому я создаю копию LazyList обычного List, который был извлечен из базы данных, и вызываю setSpecimenTypes (), чтобы заменить его новым заполненным LazyList. Кто-нибудь знает, как мне это сделать?