Java 删除一对多关系中的所有者实体
我有下一个问题 有两个实体具有双向Java 删除一对多关系中的所有者实体,java,hibernate,jpa,one-to-many,fetch,Java,Hibernate,Jpa,One To Many,Fetch,我有下一个问题 有两个实体具有双向@OneToMany关联。例如公司和员工。一家公司可能有很多员工。 我需要解雇某些员工。好的,我使用entityManager方法remove。但是如果我在@OneToMany上使用了FetchType.Eager,那么什么都不会发生。但是如果我使用了FetchType.Lazy它工作正常 你能给我解释一下吗?我认为这是因为在使用FetchType.Eager的情况下,我们显式地附加了公司实体,但如果我在删除之前在employee上使用方法getCompany(
@OneToMany
关联。例如公司
和员工
。一家公司可能有很多员工。
我需要解雇某些员工。好的,我使用entityManager
方法remove
。但是如果我在@OneToMany
上使用了FetchType.Eager
,那么什么都不会发生。但是如果我使用了FetchType.Lazy
它工作正常
你能给我解释一下吗?我认为这是因为在使用FetchType.Eager
的情况下,我们显式地附加了公司实体,但如果我在删除之前在employee上使用方法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;
}
}
import javax.persistence.*;
@实体
公营雇员{
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
私人长id;
@列(name=“name”)
私有字符串名称;
@许多酮
@JoinColumn(name=“company\u id”,nullable=false)
私营公司;
公共长getId(){
返回id;
}
公共无效集合id(长id){
this.id=id;
}
公共字符串getName(){
返回名称;
}
公共void集合名(字符串名){
this.name=名称;
}
上市公司{
返回公司;
}
上市公司(公司){
这个公司=公司;
}
}
@实体
公营公司{
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
私人长id;
私有字符串名称;
@OneToMany(mappedBy=“company”,cascade=CascadeType.ALL,fetch=FetchType.EAGER)
private List employees=new ArrayList();
公共长getId(){
返回id;
}
公共无效集合id(长id){
this.id=id;
}
公共字符串getName(){
返回名称;
}
公共void集合名(字符串名){
this.name=名称;
}
公开名单{
返回员工;
}
公共雇员(列出雇员){
这是。雇员=雇员;
}
}
我使用hibernate 4.3.6.Final和postgresql 9.3-1102-jdbc41。什么都没有发生,或者您是否收到了错误?您应该会得到错误,因为该员工仍然被公司引用。您还需要将其从公司集合中删除。我没有发现错误。我理解它,但为什么它与懒惰加载一起工作?你需要澄清什么不工作。它不会从数据库或其他东西中删除???对,db保持不变。