我有以下JPA 2.0模型:
@Entity
public class Company {
@OneToMany(mappedBy="company", targetEntity = Department.class, fetch=FetchType.LAZY, cascade=CascadeType.ALL)
private List<Department> departments;
...
}
@Entity
public class Department {
@ManyToOne
@JoinColumn(name="company_id")
private Company company;
...
}
当我尝试删除公司时,一切都很好 - 所有部门都被删除了。但是当我尝试删除Department时,会抛出以下异常: 引起:javax.persistence.EntityNotFoundException:传递给持久化的已删除实体:[my.model.Department#]
是否可以通过这种方式进行配置,当我删除部门时,公司没有任何事情发生?
@ManyToOne(cascade=CascadeType.REFRESH
部门模型上的无法解决问题。
答案 0 :(得分:3)
也许您没有从Department
实例中的private List<Department> departments;
删除引用的Company
,因此仍然会引用已删除的实例。
从列表中删除已删除的部门也应该有效。
答案 1 :(得分:1)
如果您在Company
中添加孤儿删除:
(JPA 2.0-way)
@OneToMany(mappedBy="company",
targetEntity = Department.class,
fetch=FetchType.LAZY,
cascade=CascadeType.ALL,
orphanRemoval=true)
private List<Department> departments;
(休眠路)
@OneToMany(mappedBy="company",
targetEntity = Department.class,
fetch=FetchType.LAZY,
cascade=CascadeType.ALL)
@Cascade({ org.hibernate.annotations.CascadeType.ALL,
org.hibernate.annotations.CascadeType.DELETE_ORPHAN })
private List<Department> departments;
您可以执行以下操作删除部门:
company.getDepartments().remove(department);
然后存储Company
(或在提交事务时)(假设Department
可以由一个Company
拥有。(无需告诉{{ 1}}删除EntityManager
..)