在Hibernate实体中使用ManyToOne
关联的两侧是否适合使用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
,因此它是合理的强制Employees
被删除时,Department
被删除。我对吗?
但是,关系的所有者是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);
我几乎可以肯定,如果相反的作品,我把cascadeType.PERSIST
在Employee
侧(保存Employee
将保存Department
为好)。
对于mappedBy你是对的,因此我更新了这个问题。从你的答案我推断你的建议是,cascadeType.PERSIST可以用于双方,它的工作原理。我对吗? – arjacsoh
是的。它工作正常。你为什么不测试它? –
我当然想尝试一下,但是阻碍了我在我的电脑上使用Hibernate。看到我的相关答案设想的原因:http://stackoverflow.com/questions/16638930/hibernate-does-not-create-table-in-the-database – arjacsoh