Hibernate不会更新已加入的集合

时间:2015-06-10 14:58:18

标签: hibernate orm

我有一个Employee实体(employee(id,name,company_id)):

@Entity
public class Employee {
    @Id
    @Column(name="ID")
    private Integer id; 

    @ManyToOne(fetch = FetchType.EAGER, cascade=CascadeType.ALL)
    @JoinColumn(name = "COMPANY_ID")
    private Company company;
    ...
}

我有一个公司实体(公司(id,name)):

@Entity
public class Company {
    @Id
    @Column(name="ID")
    private Integer id; 

    @OneToMany(fetch=FetchType.EAGER, cascade=CascadeType.ALL)
    @JoinColumn(name="COMPANY_ID")
    @Where(clause="status_code = '1'")
    private Set<Employee> employeeSet;
    ...
}

公司可以拥有更多员工,但一名员工一次属于一家公司。我加入了他们(我希望让员工获得状态1)并设置级联到所有人,但是当我将员工更新为另一家公司时,公司中的employeeSet不会刷新,旧公司也不会刷新。这是员工的更新方法:

sessionFactory.getCurrentSession().merge(employee);

我也尝试过更新(员工),但没有成功。我从代码中错过了什么?

1 个答案:

答案 0 :(得分:0)

首先,您的 <context-param> <param-name>resteasy.providers</param-name> <param-value>com.example.SampleRequestFilter,com.example.SampleResponseFilter</param-value> </context-param> 映射是错误的。将其更改为

employeeSet

其次,您还需要处理关系的另一面,这意味着您需要将员工添加到新公司的@OneToMany(fetch=FetchType.EAGER, cascade=CascadeType.ALL, mappedBy = "company") @Where(clause="status_code = '1'") private Set<Employee> employeeSet; 并将其从旧公司中删除。为了保持已经加载到hibernate会话中的公司的一致性,这是必要的。