我有一個問題與休眠。我有經典@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]
'employeeDao.flush()'和'interviewDao.flush()'之間的實現有什麼區別? –
您在保存記錄後將面試添加到員工*。然後在保存之前將員工添加到採訪中,因此他們的數據庫狀態可能不一致。 Hibernate可能會「幫助」你。 –
之間沒有什麼不同。只有Session.flush()。 – bajky