Из Вашего вопроса я создал классы сущностей, как показано ниже, чтобы объяснить свой ответ в правильном пути,
Примечание: - Классы сущностей только мое предположение, вы могли бы реализации его по-разному
@Entity
@Table(name="EMPLOYEE")
public class Emp implements Serializable {
@Id
@GeneratedValue()
@Column(name="ID")
private Long empId;
@ManyToOne
@JoinColumn(name="DEPARTMENT_ID")
private Dpt department;
other property
... getter() setter()
}
@Entity
@Table(name="DEPARTMENT")
public class Dpt implements Serializable {
@Id
@GeneratedValue()
@Column(name="ID")
private Long dptId;
@OneToMany(mappedBy = "department",cascade=CascadeType.ALL)
@Cascade(CascadeType.DELETE_ORPHAN)
private Set<Emp> employeeSet;
other property
... getter() setter()
}
по вашему требованию я создал двунаправленную связь в выше фрагменте кода
Задача 1
Пусть Emp в МЭИ имеет ManyToOne отношение, и я удаление Emp записи через session.delete (EmpId), в это время я не хочу, чтобы удалить Dept связанного с Emp объекта.
Ответ здесь вы выполняете
session.delete(EmpId)
в вашем коде, если вы делаете что-то вроде ниже
@ManyToOne
@JoinColumn(name="DEPARTMENT_ID",cascade=CascadeType.ALL)
private Dpt department;
or
@ManyToOne
@JoinColumn(name="DEPARTMENT_ID",cascade=CascadeType.DELETE)
private Dpt department;
только тогда JPA попытаться удалить родительский (ДПТ) при удалении ребенка (Emp)
Примечание: - Никогда не используйте casca де с @ManyToOne
Вот если вы удалите каскад из @ManyToOne должен решить ваш вопрос (удаление родителя (ДПТ) при удалении ребенка (ЭМИ))
Задача 2
мне нужно рассмотрите возможность каскада при удалении последней записи emp , связанной с дептом 101 записи. И я не хочу рассматривать параметр каскада при удалении 9 объектов emp.
Вы можете обрабатывать выше сценарии programmaticly, для объектов 9 эх вы можете использовать
session.delete(EmpId)
и 10 сотрудника
session.delete(DptId)
Здесь в коде выше я использовал
@OneToMany(mappedBy = "department",cascade=CascadeType.ALL)
@Cascade(CascadeType.DELETE_ORPHAN)
private Set<Emp> employeeSet;
Ее е функционирование @Cascade(CascadeType.DELETE_ORPHAN)
является удаление всех детей (ЭЙ) лицами, если родитель (ДПТ) объект удаляется, в вашем случае удаления DPT предприятия также удаляет ваш последний альбом Emp, связанный с этим отделом
Надежда это поможет вам
Спасибо!
* Я не могу изменить каскадный вариант в hbm. * Почему? – ben75
какое отображение вы используете? xml или аннотация – Dev
@ ben75, я не могу изменить hbm, потому что мы импортируем часть объектов модели и hbms из другой импортированной банки, в которой мы не можем делать никаких изменений. – Jai