2015-11-05 2 views
1

У меня есть одна проблема с Hibernate. Я классический @ManyToMany Ассошиация. Когда я вставляю данные в таблицы, таблица соединения пуста.Hibernate не заполняет таблицу соединений

@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(); 

Я пытался найти какое-либо решение, но не успешно. Я попытался сбросить(). 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 
     (?, ?) 

И я не понимаю, почему у меня есть пустой таблицы employee_interview, когда этот SQL сценарий был запущен. Как я могу решить эту проблему? Как я могу заполнить таблицу соединений правильными данными? Спасибо за каждый намек. :)

Когда я создаю нового сотрудника, все в порядке, но когда я использую старый объект, у меня есть исключение, этот идентификатор интервью после обновления не существует.

--UPDATE-- В ... 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

У меня есть эта строка в моем коде:/but thx – bajky

Смежные вопросы