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保持不变。