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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> org.hibernate.LazyInitializationException, при двунаправленной связи появляется 
V
    Опции темы
Maverick
Дата 6.3.2007, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1307
Регистрация: 22.9.2003
Где: Odessa, Ukraine

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



Господа, облазил весь инет...

Есть два класса
Код

@Entity
@Table(name="City")
public class CityEJB implements Serializable {

    @OneToMany(mappedBy = "cityEJB")
    private List<StreetEJB> streetEJBs;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;


и

Код

@Entity
@Table(name="Street")
public class StreetEJB implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    
    private String codeStreet;
    private String nameStreet;
   
    @ManyToOne
    @JoinColumn(name="CityEJB_id", nullable=false)    
    private
    CityEJB cityEJB;


вот такая ошибка получается при выводе

Код

org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: addressEJB.CityEJB.streetEJBs, no session or session was closed


Вызов произвожу в сервлете вот так
Код

            List citys = CityEJBFacade.findAll();

            
                for (Iterator it = citys.iterator(); it.hasNext();) {
                    CityEJB elem = (CityEJB) it.next();
                 out.println("<tr>");            
                 out.println("<td>"+elem.getCodeCity()+"</td>");
                 out.println("<td>" + elem.getNameCity()+"</td>");
                 out.println("<td>" + elem.getStreetEJBs() +"</td>");                         
                 out.println("</tr>");                 
                }


Все правильно - все работает... кроме вызова elem.getStreetEJBs() ...

Самое интересное, что если использовать провайдер TopLink - все работает без проблем... Никако lazy я не использую и пока не стремлюсь... в чем же дело??

Это сообщение отредактировал(а) Maverick - 13.3.2007, 09:16


--------------------
smile
PM ICQ GTalk   Вверх
Maverick
Дата 6.3.2007, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1307
Регистрация: 22.9.2003
Где: Odessa, Ukraine

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



Кстати, что за ерунда... разве есть у провайдеров такие отличия? Ставлю TopLink -это работает, зато другое не работает... ставлю Hibernate - это не работает, зато все остальное - прекрасно...  smile 


--------------------
smile
PM ICQ GTalk   Вверх
Mikamj
Дата 6.3.2007, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код

@JoinColumn(name="CityEJB_id", nullable=false)


Тут Вы указываете название столбца в таблице Street, содержащего внешний ключ на таблицу City.
Нужно указать еще и параметр referencedColumnName со значением, указывающим имя столбца в таблице City, на значение котрого ссылается внешний ключ из таблицы Street, например вот так:

Код

@JoinColumn(name="CityEJB_id", referencedColumnName="id", nullable=false)

PM WWW ICQ   Вверх
Maverick
Дата 6.3.2007, 18:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1307
Регистрация: 22.9.2003
Где: Odessa, Ukraine

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



Не прокатило.... то есть ссылку эту он хватает нормально, но ошибка та же...  smile 


Mikamj, к сожалению не могу поднять Вам репутацию сам... у меня запрет на это дело... 

Это сообщение отредактировал(а) Maverick - 6.3.2007, 18:53


--------------------
smile
PM ICQ GTalk   Вверх
Maverick
Дата 7.3.2007, 09:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1307
Регистрация: 22.9.2003
Где: Odessa, Ukraine

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



Вообщем так... присмотрелся...

Надо сделать так... 
Код

    @OneToMany(mappedBy = "cityEJB", fetch=FetchType.EAGER)
    private List<StreetEJB> streetEJBs;


Способ Lazy оказывается прописан по умолчанию... по крайней мере для Hibernate...  smile

Добавлено @ 09:23 
В EJB3 ничего не работает с первого раза... все надо дотыкивать и вынюхивать...  Но по сравнению с EJB2- это просто супер легкая вещь для понимания.... 


--------------------
smile
PM ICQ GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0982 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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