在Hibernate实体中,使用Cascade
在ManyToOne
关联的两侧是否合适?为了让问题更具体化,假设有以下相关实体:
public class Department
{
public long id;
@OneToMany(mappedBy = "department", cascade=cascadeType.REMOVE)
private Set<Employee> employees;
}
public class Employee{
@GeneratedValue(strategy=GeneratedValue.identity)
public longempid;
@ManyToOne
public Department department;
}
在上述关系中,一个
Department
有多个Employees
,因此在删除Department
时强制删除Employees
是合理的。我说得对吗?然而,关系的所有者是
Employee
。因此我的问题是,在哪里放置cascadeType.PERSIST
才是适当的和正确的选择。我可以根据特殊需求选择两侧中的一侧,或者也可以在两侧都放置它吗?如果我将其放在Department
方面,那么以下代码是否也会保存Employees
,考虑到Employee
是关系的所有者?Employee e1 = new Employee();
Employee e2 = new Employee();
Department d = new Department();
d.getEmployees.add(e1);
d.getEmployees.add(e2);
em.persist(d);
我几乎确定,如果我在Employee
端放置cascadeType.PERSIST
,相反的情况也是适用的。(保存Employee
将同时保存Department
)。