2010-02-10 3 views
0

Привет, В моей модели домена,Spring HibernateDaoSupport: проблема с ленивой загрузкой?

«Семья» имеет много « подсемейства в„подсемейства“имеет много» локуса в

и отношения двунаправленные с ленивой загрузкой.

ie. «Локус» может получить доступ к родительскому «SubFamily», используя alocus.getSubFamily();

Внизу ниже фрагмента Я дал метод DAO для извлечения Локуса.

В моей WebApplication (Калитка основе)

Я получаю локус от DAO, а затем попытаться получить подсемейства как:

Locus alocus = dao.getLocusByLocusId(alocusid); 
SubFamily asubfamily=alocus.getSubFamily(); 

Но он бросает ошибку:

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 com.bigg.nihonbare.common.domain.SubFamily$$EnhancerByCGLIB$$a0d68bed.getSubFamilyId(

Любой чаевые?

public Locus getLocusByLocusId(final String LocusId) { 

     return (Locus) this.getHibernateTemplate().execute(
       new HibernateCallback() { 
        public Object doInHibernate(Session session) { 
         Criteria criteria = session.createCriteria(Locus.class); 
         criteria.add(Expression.eq("locusId", LocusId)); 
         List result =criteria.list(); 
         if (result!=null && result.size() > 0) { 
          return result.get(0); 
         } 
         return null; 
        } 
       }); 
    } 

ответ

4

Понятно, что сессия Hibernate не открыта во время вызова этого метода. Вы используете Spring + Hibernate или только Hibernate? Если вы используете Spring, попробуйте использовать фильтр OpenSessionInView, предоставленный Spring в web.xml. Класс фильтра - org.springframework.orm.hibernate3.support.OpenSessionInViewFilter. Другое, если вы не используете весну, укажите более подробную информацию о том, когда и где сеанс открывается и закрывается.

+0

Я использую SPIN HibernateDAOSupport, я смущен. Везде, где Hibernate Session закрывается и открывается без фильтра OSV? –

+1

Обратный вызов будет использовать «активный» сеанс спящего режима, если он присутствует. Если нет, то сеанс будет создан, использован и закрыт в самом обратном вызове. Если вы хотите использовать возвращенный объект вне обратного вызова для запроса с помощью hibernate, тогда вам нужно будет повторно связать объекты с активным сеансом. Я бы предложил гораздо более чистый и проверенный способ OSV делать все, когда это было возможно. – Elister

+0

Elister: та же проблема, с которой я сталкиваюсь, когда пытаюсь получить доступ к DAO через автономное приложение Java. Что нужно сделать, чтобы избавиться от него? – Murugesh

Смежные вопросы