2012-05-10 6 views
1

Employee와 Shift라는 두 개의 엔티티 클래스가있는 java ee 프로젝트와 그 사이에 많은 레 트레이닝이 있습니다. 그것은 다음과 같습니다Eclipselink many to many relationship, join-table에 대한 결과가 없습니다.

 


    @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 페이지가 메서드 :



    public void addToShift(Employee e){ 
      selectedShift.addEmployee(e); 
      e.addShift(selectedShift);  
    } 

메서드를 호출 한 후 조인 테이블에 아무것도 표시되지 않습니다. entitymanager.find를 사용하여 엔티티를 다시 찾는 것과 같은 몇 가지 시도를했지만 실제로 도움이되는 것은 아무것도 없었습니다. 조인 테이블에서 아무 것도 볼 수 없으며 이유를 볼 수 없습니다. 직원을 관리하고 문제를 해결하는 데 아무런 문제가 없었습니다. 그것은 단지 연결 일뿐입니다. 아이디어가 있습니까?

답변

1

단순히 값을 분리 된 엔터티로 설정하는 것만으로는 충분하지 않습니다. 거래 내에서 여전히 EntityManager.merge으로 전화해야합니다. 그런 다음 트랜잭션이 커밋 된 후에 (또는 entitymanager가 플러시 된 경우) 데이터베이스에 결과가 표시됩니다.

지속성 컨텍스트가 아직 열려 있지 않은 경우 (사용자의 경우가 아님), 단독 작업이면 충분하며 병합은 필요하지 않습니다.