Обычная версия
Java форум JavaTalks
форум программистов

Поиск   Пользователи   Группы   Регистрация 
 Профиль   Личные сообщения 

 Вход 

Маппинг коллекций - указывать ли имплементацию???
Список форумов
 ->  Персистентность в Java (JPA, ORM, ODB)


 
Начать новую тему 
Предыдущая тема :: Следующая тема  
Автор Сообщение
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 ??? - Тут у меня пробелы... Sad
_________________
Болтовня ничего не стоит. Покажите мне код. - 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
К началу Посмотреть профиль Отправить личное сообщение Отправить e-mail
s_oleg : 68
Новичок
Откуда: Minsk

СообщениеДек 27, 2011 17:30 
Ответить с цитатой
Благодарю! Smile Предполагал верно.
_________________
Болтовня ничего не стоит. Покажите мне код. - Linus Torvalds
К началу Посмотреть профиль Отправить личное сообщение
plazman : 43
Новичок

СообщениеФев 17, 2012 13:23 
Ответить с цитатой
А разве нельзя указать Hibernate, что бы он создавал свою тайную прокси как LinkedHashSet и тогда не должно быть ClassCastException...
или я путаю Hibernate с другим более гибким аля ORM
К началу Посмотреть профиль Отправить личное сообщение Посетить сайт автора
 
Начать новую тему  Ответить на тему
Страница 1 из 1
Список форумов
 -> Персистентность в Java (JPA, ORM, ODB)


 
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Java and all Java-related trademarks and logos are trademarks or registered trademarks of Oracle Corporation in the United States and other countries.
Это сайт не относится к фирме Oracle Corporation и не поддерживается ею.

© 2006-2010 www.javatalks.ru: форум java программистов
Используется скрипт phpBB © 2001, 2010 phpBB Group

Хостинг от bizname.ru