Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > hibernate.Что значит направленность связей?


Автор: redwhite90 10.9.2013, 21:41
Допустим у нас есть отношение 1 ко многим. 

1 вариант. студент и группа. наверное тут логично иметь и со стороны студента ссылку на группу и из группы на всех студентов.
то есть у нас есть студент - у него ссылка на объект группы, а у группы есть коллекция студентов.  И хотелось бы при добавлении студента в группу(добавление и в коллекцию и выставление обратной ссылки), чтобы изменения заносились в базу и при 
Код

session.update(student)
 
и при?
Код

session.update(group)

как сделать такой маппинг?
2.Работа со справочником
Есть допустим у нас есть Машина и Цвет
у машины один цвет(ссылка на переменную). Цвет, соответсвенно, может быть у многих машин, но хранить у класса цвет коллекцию машин - нецелесообразно.

а теперь хотелось бы понять ещё как это делается для отношения многие ко многим?

Например у меня есть Студент и Предмет
у студента коллекция предметов
у предмета коллекция студентов

Хочу чтобы по вызову session.update любой из сущностей(студент или предмет)  данные в промежуточную таблицу заносились.

Я вообще правильно понимаю двунаправленность у hibernate?

Автор: Magistrus 11.9.2013, 10:14
многие ко многим смотреть здесь 
http://javaxblog.ru/article/java-hibernate-3/

Автор: Samotnik 11.9.2013, 23:40
Цитата(redwhite90 @  10.9.2013,  21:41 Найти цитируемый пост)
1 вариант. студент и группа. наверное тут логично иметь и со стороны студента ссылку на группу и из группы на всех студентов.

Есть два понятия связи унодирекция и бидирекция. По сути, связь сама по себе не меняется, просто ты можешь добавить связанное поле при желании. Но не забывай в этом случае про лэйзи инициализацию! Т.е. бидерекция != хорошо.

Цитата(redwhite90 @  10.9.2013,  21:41 Найти цитируемый пост)
И хотелось бы при добавлении студента в группу(добавление и в коллекцию и выставление обратной ссылки), чтобы изменения заносились в базу и при 

Тут другое, за это отвечает cascade. См. javax.persistence.CascadeType

Цитата(redwhite90 @  10.9.2013,  21:41 Найти цитируемый пост)
Я вообще правильно понимаю двунаправленность у hibernate? 

не со всем. Связи (one-to-many, one-to-one, many-to-one, many-to-many) и бидирекция разные вещи. 

Автор: redwhite90 12.9.2013, 09:43
Цитата(Samotnik @  11.9.2013,  23:40 Найти цитируемый пост)
Тут другое, за это отвечает cascade. См. javax.persistence.CascadeType


Сейчас проверил. а вот и нет. Если и студент и группа в базе уже есть. я их из базы забираю, сессию закрываю. потом добавляю в соответствующие коллекции, открываю сессию и делаю апдейт для любой из сущностей, то связь полюбому появляется в промежуточной таблице

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)