2015-11-05 121 views
1

我有一個問題與休眠。我有經典@ManyToMany assosciation。當我向表中插入數據時,連接表爲空休眠不填充連接表

@ManyToMany 
@JoinTable(name = "employee_interview", catalog = "db69824xmatko", schema = "", 
     joinColumns = @JoinColumn(name = "employee_id", nullable = false), 
     inverseJoinColumns = @JoinColumn(name = "interview_id", nullable = false)) 
public Set<InterviewEntity> getInterviews() { 
    return interviews; 
} 

@ManyToMany(mappedBy = "interviews") 
    public Set<EmployeeEntity> getEmployees() { 
     return this.employees; 
    } 

,我運行的代碼是在這裏:

InterviewEntity interviewEntity = prepareInterview(); 
     EmployeeEntity employeeEntity = prepareEmployeeEntity(); 
     employeeDao.create(employeeEntity); 
     employeeEntity.getInterviews().add(interviewEntity); 

     interviewEntity.getEmployees().add(employeeEntity); 
     interviewDao.create(interviewEntity); 
     interviewDao.flush(); 
     employeeDao.flush(); 

我試圖找到任何解決方案,但沒有成功。我試圖flush()。 SQL我成了無紅暈:

Hibernate: 
insert 
into 
    employee 
    (created_date, created_user, first_name, last_name, login, password) 
values 
    (?, ?, ?, ?, ?, ?) 
Hibernate: 
    insert 
    into 
     interview 
     (candidate_id, comment, created_date, created_user, interview_date, job, protocol, round) 
    values 
     (?, ?, ?, ?, ?, ?, ?, ?) 

當我使用沖洗SQL如下運行:

Hibernate: 
    insert 
    into 
     employee_interview 
     (employee_id, interview_id) 
    values 
     (?, ?) 

而且我不明白爲什麼我有這樣的時候SQL腳本運行的空表employee_interview。我如何解決這個問題?我如何使用正確的數據填充連接表?感謝每一個提示。 :)

當我創建新員工時一切正常,但是當我使用舊對象時,我有例外,更新後面試的ID不存在。

--UPDATE-- In ... InterviewEntity interviewEntity = prepareInterview();

 EmployeeEntity employeeEntity = employeeDao.findById(11); 
     employeeEntity.getInterviews().add(interviewEntity);//<<------------ 

     CandidateEntity candidateEntity = prepareCandidateEntity(); 

     interviewEntity.setCandidate(candidateEntity); 
     interviewEntity.getEmployees().add(employeeEntity);//<<------------ 
     candidateDao.create(candidateEntity); 
     interviewDao.create(interviewEntity); 
     employeeDao.updateObject(employeeEntity); 

這個代碼拋出此異常

org.hibernate.ObjectNotFoundException: No row with the given identifier exists: [com.tuke.entity.InterviewEntity#104] 
+0

'employeeDao.flush()'和'interviewDao.flush()'之間的實現有什麼區別? –

+0

您在保存記錄後將面試添加到員工*。然後在保存之前將員工添加到採訪中,因此他們的數據庫狀態可能不一致。 Hibernate可能會「幫助」你。 –

+0

之間沒有什麼不同。只有Session.flush()。 – bajky

回答

0

嘗試設置在InterviewEntity的關係了。例如:

interviewEntity.getEmployees().add(employeeEntity) 
+0

我在我的代碼中有這一行:/但thx – bajky