删除一对多关系中的所有者实体

时间:2015-03-03 12:10:40

标签: java hibernate jpa one-to-many fetch

我有下一个问题。

有两个实体具有双向@OneToMany关联。例如CompanyEmployee。一家公司可能有很多员工。 我需要删除某些员工。好的,我使用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。

0 个答案:

没有答案