2012-05-10 59 views
1

我有两个实体类:Employee和Shift的java ee项目,并且它们之间有多对多的关联关系。它看起来像这样:Eclipselink多对多的关系,没有结果连接表

 


    @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再次查找实体,但没有什么帮助,我无法看到连接表中的任何内容,我看不到为什么。管理员工和转变没有问题,这只是“连接”......你有什么想法吗?

回答

1

仅仅将值设置为分离的实体是不够的。您仍然需要在交易中拨打EntityManager.merge。然后在提交事务(或者entitymanager被刷新)之后,您也会在数据库中看到结果。

当持久化上下文仍处于打开状态时(它不在你的情况下),单独刷新就足够了,不需要合并。