Пока я писал этот вопрос, я нашел решение, но все равно собираюсь спросить.Может быть, есть более простой способ сделать это.
Я хочу сделать таблицу ассоциаций из двух таблиц.Давайте назовем их студентом и курсом.Оба имеют идентификатор и уникальное имя.
Мне нужна третья таблица (student_id to course_id), которая автоматически обновляется, когда я вставляю студента, который посещает курсы.
Это почти следующий пример, который янайдено здесь: Hibernate «многие ко многим» с аннотациями , но я изменил аннотацию @Table на
@Table(name = "STUDENT",
uniqueConstraints = {@UniqueConstraint(columnNames = {"STUDENT_NAME" })})
То же самое для курсов.
Я вставляю первого студента
Set<Course> courses = new HashSet<Course>();
courses.add("Math); courses.add("Science");
Student alice = new Student("alice", courses);
Приходит еще один студент
Student bob= new Student("bob", courses);
И происходит сбой, потому что курсы естествознания и математики уже существуют в таблицах курсов, и таблица student_to_course не будет обновлена.
Что я знаю, так это запросил курс с таким именем в таблице курсов.Если он есть, я добавляю его в курс студентов, в противном случае добавляю новый.
List<Course> list = session.createCriteria(Course.class)
.add(Restrictions.eq("courseName", "Maths")).list();
if (list.size() > 0){
courses.add(list.get(0));
}
else {
courses.add(new Course("Maths"));
}
s.setCourses(courses);
Так что это работает, но я думаю, что должен быть лучший способ сделать это.
Есть ли способсказать hibernate добавить курсы к студенту из таблицы курсов, если в таблице уже есть курс с таким именем?