我有一个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);
我也尝试过更新(员工),但没有成功。我从代码中错过了什么?
答案 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会话中的公司的一致性,这是必要的。