Здесь у меня вопрос о постоянных свойствах «многие ко многим».
Пример:
class Movie {
/**
* @hibernate.bag cascade="save-update" table="movie_genre"
* @hibernate.collection-key column="ITEM_ID"
* @hibernate.collection-many-to-many column="GENRE_ID" class="Genre"
* @hibernate.collection-cache usage="read-write"
*/
public List<Genre> getGenres() {
return genres;
}
...
}
class Genre {
}
Предположим, в БД есть два фильма:
Фильм A с жанром X1 и X2
Фильм B с жанром Y1 и Y2
Теперь я собираюсь скопировать жанры из фильма A в фильм B со следующим кодом:
Movie b = findById('B');
Movie a = findById('A');
a.setGenres(b.getGenres());
session.saveOrUpdate(a);
session.flush();
Теперь отношения оригинальных фильмов B и жанров удалены. Но, если я ссылаюсь на следующий код:
a.setGenres(new ArrayList(b.getGenres()));
Затем отношения Фильм B и жанры сохраняются.
В первом фрагменте кода: hibernate вызовет два удаления sql в таблице отношений movie_genre, которые удаляют отношения Movie B & A;
Во втором: hibernate вызовет удаление sql, чтобы удалить только фильм A.
Это механизм для Hibernate для сохранения объектов отношений? Не могли бы вы дать мне несколько советов?