我有下一个问题。
有两个实体具有双向@OneToMany
关联。例如Company
和Employee
。一家公司可能有很多员工。
我需要删除某些员工。好的,我使用entityManager
方法remove
。但!如果我在FetchType.Eager
上使用@OneToMany
则没有任何反应。但如果我使用FetchType.Lazy
它可以正常工作。
你能为我解释一下吗?我认为这是因为在使用FetchType.Eager
的情况下我们明确地附加了公司实体,但是如果我在员工上使用方法getCompany(当我使用FetchType.Lazy
时),在删除它之前仍然可以正常工作。
代码示例:
em.getTransaction().begin();
Employee employee = em.find(Employee.class, 1L);
em.remove(employee);
em.getTransaction().commit();
实体代码:
import javax.persistence.*;
@Entity
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "name")
private String name;
@ManyToOne
@JoinColumn(name = "company_id", nullable = false)
private Company company;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Company getCompany() {
return company;
}
public void setCompany(Company company) {
this.company = company;
}
}
@Entity
public class Company {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@OneToMany(mappedBy = "company", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private List<Employee> employees = new ArrayList<Employee>();
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Employee> getEmployees() {
return employees;
}
public void setEmployees(List<Employee> employees) {
this.employees = employees;
}
}
我使用hibernate 4.3.6.Final和postgresql 9.3-1102-jdbc41。