Spring+Hibernate+LazyInitializationException

Sep 24, 2009 11:22

Привет всем!
Помогите разобраться с получением LazyInitializationException.
В DAO имею метод:

public Town getTownById(Long id){
return (Town) getHibernateTemplate().load(Town.class, id);
}

При попытке вызова даннго метода из контроллера поллучаю LazyInitializationException

public ModelAndView handleRequest(HttpServletRequest ( Read more... )

spring, hibernate

Leave a comment

Comments 8

svaor September 24 2009, 07:41:55 UTC
Больше бы данных иметь... стектрейс, как организованы транзакции, как настроен хибер, поля класса. В Town, кстати, блобов случайно нет?

Reply

drwx September 24 2009, 07:57:27 UTC
Блобов нет.

SEVERE: could not initialize proxy - no Session
org.hibernate.LazyInitializationException: could not initialize proxy - no Session
at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:57)
at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:111)
at org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.invoke(CGLIBLazyInitializer.java:150)
at ru.bds.model.Town$$EnhancerByCGLIB$$9d0924d1.getName( at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method ( ... )

Reply

svaor September 24 2009, 08:09:44 UTC
К сожалению, с freemaker'ом не работал, но предполагаю, что должен быть использован фильтр, открывающий сессию хибера при http-запросе и закрывающий ее после отрисовки шаблона.
Взгляни на org.springframework.orm.hibernate3.support.OpenSessionInViewFilter (м.б. OpenSessionInViewInterceptor).

Reply

alamar September 24 2009, 09:32:52 UTC
У тебя действительно не там закрывается сессия.
Ее нельзя закрывать до окончания отдачи страницы (разве что ты очень любишь боль).

Хотя вне зависимости от любви с Hibernate она тебе обеспечена.

Reply


lexicore September 24 2009, 08:12:36 UTC
См. OpenSessionInView* паттерн.

Reply


drwx September 24 2009, 12:50:11 UTC
Убрал передачу объекта town в шаблон. Заменил метод в DAO следующим:

public Town getTownById(Long id){
HibernateTemplate ht = getHibernateTemplate();
Object obj = ht.load(Town.class, id);
Hibernate.initialize(obj);
return (Town) obj;
}

Имею следующее:
4.09.2009 16:48:44 org.hibernate.LazyInitializationException SEVERE: could not initialize proxy - no Session ( ... )

Reply

(The comment has been removed)

drwx September 24 2009, 14:27:44 UTC
А можно для тупых ткнуть на строчку которую нужно читать.

Reply

(The comment has been removed)


Leave a comment

Up