powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate: LazyInitializationException: failed to lazily initialize a collection of role
13 сообщений из 38, страница 2 из 2
Hibernate: LazyInitializationException: failed to lazily initialize a collection of role
    #37713738
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivanov-void,
ivanov-voidЕсть- ли способы разорвать эту "already associated with the session"?
Код: java
1.
2.
3.
4.
5.
6.
Book b = new Book();
b.setName("ВойнаИмир");
Autor a = new Autor();
a.setName("Иванов");
b.addAutor(a);
session.saveOrUpdate(b);
...
Рейтинг: 0 / 0
Hibernate: LazyInitializationException: failed to lazily initialize a collection of role
    #37713972
Фотография ivanov-void
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нашел, окуда второй в сессии - ниже поясню.

Petro123, допустим.

Но что, если (да простит меня Лев Николаевич) -

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
...
@Entity
@Cache(usage = org.hibernate.annotations.CacheConcurrencyStrategy.NONE)
@Table(name = "WAR_N_PEACE")
public class Book {
	@Id	
	@Column(name = "ID")
	private Integer id;

	@OneToMany(cascade = CascadeType.ALL,fetch=FetchType.LAZY,mappedBy="book")
	private List<Authors> authors = new ArrayList<Authors>();
...
}



И соответственно -

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
@Entity
@Cache(usage = org.hibernate.annotations.CacheConcurrencyStrategy.NONE)
@Table(name = "Authors")
public class Authors {
	@Id
	@Column(name = "ID")
	private Integer id;

	@ManyToOne
	private Book book;
...	
}



Добавим книгу -

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Book book = new Book();
...
dao.save(book);

Потом где- то сформируем список авторов -
...
Book book = dao.getBook(id);
Author author = new  Author();
...
book.getAuthors().add(author); //<<<< список на каждое обращение создается заново
...
Рейтинг: 0 / 0
Hibernate: LazyInitializationException: failed to lazily initialize a collection of role
    #37714032
Фотография ivanov-void
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вернее, не так - при session.saveOrUpdate(b); обновится родитель, но потомки не сохранятся. Минутку..
...
Рейтинг: 0 / 0
Hibernate: LazyInitializationException: failed to lazily initialize a collection of role
    #37714429
Фотография ivanov-void
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дело не в этом, там вполне закономерно появляется org.hibernate.exception.ConstraintViolationException, следовательно, в списке всегда одна запись.

Поэтому я упоминал о составных ключах.

Хорошо, допустим я добавлю дополнительные поля в обе таблицы, не потеряю- ли я при этом имеющийся функционал, скажем поиска по Id, если его значение станет мне неизвестным? Так я могу передать его из свойста Item той строки, которую выбрал, однако при этом без составного ключа более одной записи в подчиненной сущности заиметь не удастся.
...
Рейтинг: 0 / 0
Hibernate: LazyInitializationException: failed to lazily initialize a collection of role
    #37714432
Фотография ivanov-void
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хм, хотя ничто не мешает взять его через геттер. Вобщем, придется снова перегенерировать схему.
...
Рейтинг: 0 / 0
Hibernate: LazyInitializationException: failed to lazily initialize a collection of role
    #37714585
Йуный джавистЪ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Открывайте и закрывайте сессию в сервлет-фильтре. Сам Гевин официально одобряет такой способ, см Hibernate in Action.
...
Рейтинг: 0 / 0
Hibernate: LazyInitializationException: failed to lazily initialize a collection of role
    #37714680
Фотография ivanov-void
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приветствую, Йуный джавистЪ!

Согласен.
...
Рейтинг: 0 / 0
Hibernate: LazyInitializationException: failed to lazily initialize a collection of role
    #37715116
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Йуный джавистЪОткрывайте и закрывайте сессию в сервлет-фильтре. Сам Гевин официально одобряет такой способ, см Hibernate in Action.
Видать задолбали его вопросами "что делать" и "как быть".
https://www.google.com/search?q=Open+session+in+view+antipattern
...
Рейтинг: 0 / 0
Hibernate: LazyInitializationException: failed to lazily initialize a collection of role
    #37715156
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,
обычное дело.
Стандарты и спецификации загоняют в узкие (замечательные) рамки. А жизнь, она не по спецификациям.
Это как Модель загонять в 3 типа отношений
...
Рейтинг: 0 / 0
Hibernate: LazyInitializationException: failed to lazily initialize a collection of role
    #37716323
Йуный джавистЪ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
https://www.google.com/search?q=Open+session+in+view+antipattern

А в чем проблема такого подхода?
...
Рейтинг: 0 / 0
Hibernate: LazyInitializationException: failed to lazily initialize a collection of role
    #37716334
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Йуный джавистЪА в чем проблема такого подхода?
Первые 3-4 ссылки прочитайте. Там подробно описано. Не вижу смысла копипастить сюда.
...
Рейтинг: 0 / 0
Hibernate: LazyInitializationException: failed to lazily initialize a collection of role
    #37716399
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Йуный джавистЪ https://www.google.com/search?q=Open+session+in+view+antipattern

А в чем проблема такого подхода?
в этом
https://www.google.com/search?q=Open+session+in+view+pattern
:)
...
Рейтинг: 0 / 0
Hibernate: LazyInitializationException: failed to lazily initialize a collection of role
    #37942916
j-unior
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте,
у меня не получается настроить OSIV фильтер. Несмотря на то, что он есть я получаю сессии с разными хэш кодами от фабрики сессий. Вот мой код для примера

web.xml

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        WEB-INF/applicationContext.xml
    </param-value>
</context-param>


<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
    <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>

<filter>
    <filter-name>Hibernate-OSIV pattern</filter-name>
    <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
    <init-param>
        <param-name>sessionFactoryBeanName</param-name>
        <param-value>sessionFactory</param-value>
    </init-param>
    <init-param>
        <param-name>singleSession</param-name>
        <param-value>true</param-value>
    </init-param>
    <init-param>
        <param-name>flushMode</param-name>
        <param-value>AUTO</param-value>
    </init-param>

</filter>
<filter-mapping>
    <filter-name>Hibernate-OSIV pattern</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>



Мой ДАО просто напросто получает SessionFactory из Spring контекста и с ними производит все операции. Т.е

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
public class BasicDaoImpl implements BasicDao {

private Class currentClass;

private SessionFactory sessionFactory;

public SessionFactory getSessionFactory() {
    return sessionFactory;
}

public void setSessionFactory(SessionFactory sessionFactory) {
    this.sessionFactory = sessionFactory;
}

@Transactional(readOnly = true)
@Override
public T getById(long id) {
    Session session = getCurrentSession();
    return (T) session.get(getGenericClass(), id);
}

@Transactional(readOnly = true)
@Override
public List<T> getAll() {
    Session session = getCurrentSession();
    return session.createCriteria(getGenericClass()).list();
}
...
protected Session getCurrentSession() {
    return sessionFactory.getCurrentSession();
}



а SessionFactory определяется очень просто:

Код: xml
1.
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"autowire="no">



контекст в сервлете я получаю так:

Код: java
1.
applicationContext = WebApplicationContextUtils.getWebApplicationContext(servletConfig.getServletContext());



Не могу понять где собака зарыта. Буду признателен за любые идеи.
...
Рейтинг: 0 / 0
13 сообщений из 38, страница 2 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate: LazyInitializationException: failed to lazily initialize a collection of role
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]