我有以下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;
...
}
当我试图删除Company时,一切都很好-所有部门都被删除了。但是当我试图删除Department时,它抛出了以下异常:由于:javax.persistence.EntityNotFoundException:删除实体传递给持久化:[my.model.Department#]
是否可以这样配置,当我删除Department时,Company不会发生任何变化?
@ManyToOne(cascade=CascadeType.REFRESH
on Department model并不能解决问题
也许您没有从Company
实例的private List<Department> departments;
中删除被引用的Department
,因此被删除的实例仍然被引用。
将已删除的部门也从列表中删除,它应该可以工作。
如果在Company
中添加孤儿删除:
(JPA 2.0方法)
@OneToMany(mappedBy="company",
targetEntity = Department.class,
fetch=FetchType.LAZY,
cascade=CascadeType.ALL,
orphanRemoval=true)
private List<Department> departments;
(Hibernate-way) @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
拥有)。(不需要告诉EntityManager
删除Department
..)