У меня есть одна проблема с 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]
В чем разница между реализациями 'employeeDao.flush()' и 'interviewDao.flush()'? –
Вы добавляете интервью сотруднику * после того, как * вы сохранили запись. Затем вы добавляете сотрудника в интервью, прежде чем сохранять его, поэтому их состояние базы данных может быть непоследовательным. Hibernate может «помочь» вам там. –
нет другой между. это только Session.flush(). – bajky