Здесь у меня есть вопрос о сохранении свойств «многие-ко-многим».Запрашиваемая помощь для сохранения свойств многих-ко-многим в Hibernate
Пример:
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 {
}
Предположительно, есть два фильма в дб:
Фильм А с Жанр X1 & X2
фильм B с Жанр Y1 & У2
Теперь я собираюсь скопировать жанры из фильма 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()));
Тогда отношения Movie B & жанры сохраняются.
В первом фрагменте кода: спящий режим будет вызывать два удаления sql на таблице отношений movie_genre, которая удаляет Movie B & Отношения;
Во втором: спящий режим запускает удаление sql, чтобы удалить только фильм A.
Является ли это механизмом для Hibernate для сохранения объектов отношений? Не могли бы вы дать мне несколько советов?
JesperSM, вы определенно правы. Сборник жанров - это экземпляр org.hibernate.collection.PersistentBag, который несет отношения и т. Д. Большое спасибо! –