|
Java форум JavaTalks форум программистов
|
|
|
|
| Предыдущая тема :: Следующая тема |
| Автор |
Сообщение |
s_oleg : 68 Новичок Откуда: Minsk
|
Дек 27, 2011 12:46 |
|
|
День добрый. Вопрос для гуру прост:
| Цитата: |
1. -- указывать ли имплементацию, при мапинге коллекций?
2. -- Да/Нет и почему, и чем это грозит?
|
К примеру:
| Код: |
// Имеем список переводов новостей
@OneToMany(mappedBy = "news", cascade = CascadeType.ALL)
private Set<NewsTerm> newsTerms = new LinkedHashSet<NewsTerm>();
// вот тут:
// = new LinkedHashSet<NewsTerm> - указывать не обязательно
|
Насколько я понимаю, Hibernate сам подставляет необходимую коллекцию. поэтому кстати и сеттеры у нас имеют вид:
| Код: |
public void setNewsTerms(Set<NewsTerm> newsTerms) {
this.newsTerms = newsTerms;
}
|
Т.е наш LinkedHashSet - фактически заглушка, а инициализация будет именно тем классом который создаст хибер ??? Или же он возмет указанную LinkedHashSet ??? - Тут у меня пробелы...  _________________ Болтовня ничего не стоит. Покажите мне код. - Linus Torvalds |
|
|
|
 |
Ivan Skrypka : 63 Новичок
|
Дек 27, 2011 13:08 |
|
|
| он подставит свою колекцию. Ваша затреться. |
|
|
|
 |
Староверъ : 7620 Ктапубеп Откуда: Elfland
|
Дек 27, 2011 13:31 |
|
|
Изначально, когда ты сам создашь объект, то при сохранении твоя коллекция будет итерироваться и сохраняться. Однако когда ты выберешь объект из БД, то Хиб установит свою коллекцию по средством setNewsTerms(), и твоя пустая коллекция перетреться другой.
Ты можешь убедится в этом если укажешь не
| Код: |
| private Set<NewsTerm> newsTerms = new LinkedHashSet<NewsTerm>() |
а
| Код: |
| private LinkedHashSet<NewsTerm> newsTerms = new LinkedHashSet<NewsTerm>() |
Попробуй сохранить и все пройдет удачно, но как только ты выберешь объект из БД, произойдет ClassCastException, ибо у Хиба свои реализации Set'a, List'a и пр. и при попытке присвоить эту реализацию твоему LinkedHashSet произойдет исключение. _________________ JTalks Open Source Project, JT Webinars, JT Interview |
|
|
|
 |
s_oleg : 68 Новичок Откуда: Minsk
|
Дек 27, 2011 17:30 |
|
|
Благодарю! Предполагал верно. _________________ Болтовня ничего не стоит. Покажите мне код. - Linus Torvalds |
|
|
|
 |
plazman : 43 Новичок
|
Фев 17, 2012 13:23 |
|
|
А разве нельзя указать Hibernate, что бы он создавал свою тайную прокси как LinkedHashSet и тогда не должно быть ClassCastException...
или я путаю Hibernate с другим более гибким аля ORM |
|
|
|
 |
|
|
|