Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Hibernate мапинг, OneToMany 
:(
    Опции темы
m1ha
Дата 2.2.2008, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 14.5.2007

Репутация: нет
Всего: 1



Имеются 3 таблицы. CAR, CAR_ID, CAR_USER
Таблица CAR содержит поля ID и CAR_ID и выполняет роль журналирования, то есть одна машина может быть записана несколько раз
Пример CAR
Код

ID    CAR_ID                
----- -----------
0       99
1       110
2       99
3       110
4       99


Таблица CAR_ID содержит уникальные ID машины
Пример CAR_ID
Код

ID
-------
99
110


Таблица CAR_USER содердит в себе унакальный ID машины, и ID пользователя
пример CAR_USER
Код

ID    CAR_ID    USER_ID            
----- -----------  -----------
1        99            20             
2        99            21
3        99            22
4        110          26
5        110          28

Описываю класс Car
У одной машины может быть много пользователей следовательно связь OneToMany
Код

@Entity
public class Car implements Serializable {

@OneToMany
@JoinColumn(name = "CAR_ID")
  private List<CarUser> carUser = new LinkedList<CarUser>();
}


Ну и кодгда пытаюсь загрузить пользователей машины получаю
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: car.model.carUser, no session or session was closed at
org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:358) at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationExceptionIfNotConnected(AbstractPersistentCollection.java:350) at org.hibernate.collection.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:343) at org.hibernate.collection.AbstractPersistentCollection.read(AbstractPersistentCollection.java:86) at org.hibernate.collection.PersistentBag.toString(PersistentBag.java:483) at java.lang.String.valueOf(String.java:2615) at java.io.PrintStream.print(PrintStream.java:616) at java.io.PrintStream.println(PrintStream.java:753) 
Думаю, что ошибка в мапинге. Но как сделать его правильно пока не знаю.
PM MAIL   Вверх
Ornitos
Дата 2.2.2008, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 13.10.2007
Где: Непал

Репутация: 1
Всего: 3



Ошибка скорее всего не в мэпинге.

Покажи как ты загружаешь пользователей.

Ещё можешь вот это посмотреть: может помочь
PM MAIL WWW   Вверх
m1ha
Дата 2.2.2008, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 14.5.2007

Репутация: нет
Всего: 1



ну так все остальные обьекты класса Car (которые так же беруться из базы) получить можно, а exception возникает только когда обращаешься к carUser я всё таки думаю, что проблема в мапинге.

Это сообщение отредактировал(а) m1ha - 2.2.2008, 22:27
PM MAIL   Вверх
Kangaroo
Дата 2.2.2008, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


Профиль
Группа: Участник Клуба
Сообщений: 2042
Регистрация: 7.10.2006
Где: US

Репутация: 14
Всего: 104



Цитата(m1ha @  2.2.2008,  20:10 Найти цитируемый пост)
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: car.model.carUser, no session or session was closed at

Это не в маппинге ошибка, а просто вы обращаетесь к коллекции, когда уже закрыли сессию. И Хайбернейт не может подгрузить настоящие объекты из базы.
Можно замапить, чтобы он не использовал лейзи инициализацию, а сразу все грузил. С маппинг файлами я использовал:
Код

 lazy="false"  outer-join="true" 

А вот как это аннотациями сделать не знаю.


--------------------
Lost....
PM MAIL MSN   Вверх
arthurkas
Дата 12.3.2008, 05:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 11.3.2008

Репутация: нет
Всего: нет



Цитата

А вот как это аннотациями сделать не знаю.

Код

@OneToMany(fetch = FetchType.EAGER)


FetchType.EAGER тоже что и lazy="false"
PM MAIL   Вверх
teg
Дата 13.3.2008, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 12.3.2008

Репутация: нет
Всего: нет



Ставить EAGER - плохой тон, также как и использование списка и инициализация в поле.
Итого:
* надо оставить LAZY, но про хайбер что-то таки прочитать
* List заменить на Set
* убрать код инициализации поля
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.1014 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.