Spring HibernateDaoSupport: проблема с отложенной загрузкой? - PullRequest
0 голосов
/ 10 февраля 2010

Привет, В моей модели домена,

«Семья» имеет много подсемейства У «Подсемейства» много «Локуса»

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

есть. Locus может получить доступ в родительском SubFamily с помощью alocus.getSubFamily ();

Ниже фрагмента я дал метод DAO для извлечения Locus.

В моем веб-приложении (на основе Wicket)

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

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

Но выдает ошибку:

org.hibernate.LazyInitializationException: не удалось инициализировать прокси - нет сессия в org.hibernate.proxy.AbstractLazyInitializer.initialize (AbstractLazyInitializer.java:57) в org.hibernate.proxy.AbstractLazyInitializer.getImplementation (AbstractLazyInitializer.java:111) в org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.invoke (CGLIBLazyInitializer.java:150) в 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;
                    }
                });
    }

1 Ответ

4 голосов
/ 10 февраля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...