Имеются две сущности:
| Код | package com.vc.vacancies.model.entities.directories.directoryEntries;
import com.vc.vacancies.model.entities.directories.AbstractDirectoryEntry; import com.vc.vacancies.model.entities.directories.ComplexDirectoryEntry; import org.hibernate.annotations.Cascade;
import javax.persistence.*;
/** * Класс, описывающий сущность, выбранную из справочника "Города". * <p/> * Date: 08.02.2010<br /> * Time: 12:44:24<br /> * * @author maxpayne * @version 1.0 */ @Entity @Table(name = "list_cities") @AttributeOverrides({ @AttributeOverride(name = "id", column = @Column(name = "city_id", nullable = false)), @AttributeOverride(name = "name", column = @Column(name = "city", length = 255, nullable = false))}) public class City extends AbstractDirectoryEntry implements ComplexDirectoryEntry<Area> { /** * Район, в котором находится данный город. */ private Area parentEntry;
@ManyToOne @Cascade({org.hibernate.annotations.CascadeType.SAVE_UPDATE}) @JoinColumn(name = "area_id") @Override public Area getParentEntry() { return this.parentEntry; }
@Override public void setParentEntry(Area entry) { this.parentEntry = entry; } }
|
| Код | package com.vc.vacancies.model.entities.directories.directoryEntries;
import com.vc.vacancies.model.entities.directories.AbstractDirectoryEntry; import com.vc.vacancies.model.entities.directories.ComplexDirectoryEntry; import org.hibernate.annotations.Cascade;
import javax.persistence.*;
/** * Класс, описывающий сущность, выбранную из справочника "Районы". * <p/> * Date: 08.02.2010<br /> * Time: 14:03:19<br /> * * @author maxpayne * @version 1.0 */ @Entity @Table(name = "list_areas") @AttributeOverrides({ @AttributeOverride(name = "id", column = @Column(name = "area_id", nullable = false)), @AttributeOverride(name = "name", column = @Column(name = "area", length = 255, nullable = false))}) public class Area extends AbstractDirectoryEntry implements ComplexDirectoryEntry<Region> { /** * Регион, в котором находится данный район. */ private Region parentEntry;
@ManyToOne @Cascade({org.hibernate.annotations.CascadeType.SAVE_UPDATE}) @JoinColumn(name = "region_id") @Override public Region getParentEntry() { return this.parentEntry; }
@Override public void setParentEntry(Region entry) { this.parentEntry = entry; } }
|
В базе в таблице с городами есть ссылка на район, в котором находится город. Возникает вопрос: можно ли, вызывая session.delete(area), сделать так, чтобы были удалены все города, находящиеся в этом районе, не создавая в классе Area коллекцию городов и не мапя ее @OneToMany? Также нужно, чтобы создание города вызывало создание района, а оно - создание региона (код класса региона опущен), если район и регион еще не были persist в базу. |