我有两个实体类的java ee项目:Employee和Shift,它们之间有很多对应的关系。它看起来像这样:
@Entity
public class Employee implements Serializable {
@ManyToMany(mappedBy="employees")
private List shifts;
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String surname;
private String firstname;
...
@Entity
public class Shift implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Temporal(javax.persistence.TemporalType.TIMESTAMP)
private Date timeStart;
@Temporal(javax.persistence.TemporalType.TIMESTAMP)
private Date timeEnd;
private int workers;
private int overseers;
@ManyToMany
private List employees;
我有一个JSF页面,我想将员工(逐个)添加到选定的班次,所以在我的支持bean中有这个方法:
public void addToShift(Employee e){
selectedShift.addEmployee(e);
e.addShift(selectedShift);
}
调用该方法后,我在连接表中看不到任何内容。我尝试了一些东西,比如使用entitymanager.find再次查找实体,但没有什么真正帮助,我在连接表中看不到任何东西,我看不出原因。管理员工和转移没有问题,只是“连接”......你有什么想法吗?
答案 0 :(得分:1)
仅仅将值设置为分离的实体是不够的。你仍然需要在交易中调用EntityManager.merge。然后在提交事务(或刷新entitymanager)之后,您将在数据库中看到结果。
当持久性上下文仍然打开时(在你的情况下不是这样),单独刷新就足够了,不需要合并。