Hibernate, bidirectional связь
От: Foror http://foror.ru
Дата: 28.11.05 12:10
Оценка:
Читаю сейчас Hibernate in action, и кое-что я не понимаю(видимо из-за плохого английского),
а именно там есть пример с Item и Bid:

class Item
{
private Set<Bid> bids;

...

public void addBid(Bid bid)
{
bids.add(bid);
bid.item = this;
}
}


class Bid
{
public Item item;

...
}

Т.е. мы имеем bidirectional связь. Собственно и вопрос, а зачем так делать? Что-то
изменится, если из Bid мы не будем обратно ссылаться на Item? Или в такой фиче
нуждается hibernate для своих каких-нибудь замут?
Re: Hibernate, bidirectional связь
От: A_Gura Россия http://a-gura.livejournal.com
Дата: 28.11.05 12:44
Оценка:
Здравствуйте, Foror, Вы писали:

F> Т.е. мы имеем bidirectional связь. Собственно и вопрос, а зачем так делать? Что-то

F> изменится, если из Bid мы не будем обратно ссылаться на Item? Или в такой фиче
F> нуждается hibernate для своих каких-нибудь замут?

Просто напросто пока ты не вызовешь save() или commit(), bid не будет ничего знать об item, поэтому мы сообщаем об этом явно.

Что касается замут hibernate, то в маппинг-файле должно быть определено свойство inverse="true" (со стороны многих, для связи один ко многим, и с любой из сторон для связи многие ко многим), иначе hibernate не будет знать как правильно сгенерировать SQL-запрос.
... << RSDN@Home 1.1.4 stable rev. 510>>
Работать надо над собой...
Re: Hibernate, bidirectional связь
От: Legus79 Россия  
Дата: 02.12.05 13:38
Оценка:
Здравствуйте, Foror, Вы писали:

F> Читаю сейчас Hibernate in action, и кое-что я не понимаю(видимо из-за плохого английского),

F> а именно там есть пример с Item и Bid:

F> Т.е. мы имеем bidirectional связь. Собственно и вопрос, а зачем так делать? Что-то

F> изменится, если из Bid мы не будем обратно ссылаться на Item? Или в такой фиче
F> нуждается hibernate для своих каких-нибудь замут?

Мне кажется что про связи очень понятно написано в документации к hibernate с хорошими примерами, рекомендую посмотреть.
Связи могут быть однонаправленными и двунаправленными, в зависимости от того, что тебе нужно от модели, а hibernate умеет маппить и так и так. Как тут правильно написали, при двунаправленной связи с одной стороны надо указать inverse="true". Плюс не забывать, кто будет управлять состоянием связных объектов — модель (сам для всех детей вызываешь save) или hibernate (тогда в маппинге указываем cascade="...").
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.