2015-11-05 115 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