Frühjahr HibernateDaoSupport halten die gleiche Session?

In der standalone-Anwendung(single-threaded Kommandozeilen-tool), ich entwickle ,ich benutze Spring +Hibernate.
Es hat DAO und Service-Layern und für DAOs ich benutze HibernateDAOSupport.
Die Sammlungen im domain-Modell sind lazy-loading.

Da für lazy-loading ich brauche, um die Sitzung zu bekommen,öffne ich Sitzung beim start meiner Anwendung mit:

HibernateTemplate tmpl;     
SessionFactoryUtils.initDeferredClose(tmpl.getSessionFactory());

//do file reads,parse CSV , persist objects (normally takes along time)
//
//Finally

SessionFactoryUtils.processDeferredClose(tmpl.getSessionFactory());

Aber bei der Ausführung erhalte ich die Fehlermeldung:

Exception in thread "main"
org.springframework.orm.hibernate3.HibernateSystemException:
Illegalen Versuch zu verbinden
Sammlung mit zwei offenen Sitzungen;
verschachtelte Ausnahme ist
org.hibernate.HibernateException:
Illegalen Versuch zu verbinden
Sammlung mit zwei offenen Sitzungen
Verursacht durch:
org.hibernate.HibernateException:
Illegalen Versuch zu verbinden
Sammlung mit zwei offenen sessions
org.hibernate.collection.AbstractPersistentCollection.setCurrentSession(AbstractPersistentCollection.java:410)
bei
org.hibernate.event.def.OnUpdateVisitor.processCollection(OnUpdateVisitor.java:43)
bei
org.hibernate.event.def.AbstractVisitor.processValue(AbstractVisitor.java:101)
bei
org.hibernate.event.def.AbstractVisitor.processValue(AbstractVisitor.java:61)
bei
org.hibernate.event.def.AbstractVisitor.processEntityPropertyValues(AbstractVisitor.java:55)
bei
org.hibernate.event.def.AbstractVisitor.Prozess(AbstractVisitor.java:123)
bei
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:293)
bei
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:223)
bei
org.hibernate.event.def.DefaultUpdateEventListener.performSaveOrUpdate(DefaultUpdateEventListener.java:33)
bei
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
bei
org.hibernate.impl.SessionImpl.fireUpdate(SessionImpl.java:564)
bei
org.hibernate.impl.SessionImpl.update(SessionImpl.java:552)

Wie man dieses Problem beheben?

in
org.hibernate.impl.SessionImpl.update(SessionImpl.java:544)
bei
org.springframework.orm.hibernate3.HibernateTemplate$14.doInHibernate(HibernateTemplate.java:657)
bei
org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:372)
bei
org.springframework.orm.hibernate3.HibernateTemplate.update(HibernateTemplate.java:654)
bei
org.springframework.orm.hibernate3.HibernateTemplate.update(HibernateTemplate.java:650)
bei
com.bigg.nihonbare.common.dao.hibernate.CommonDAOImpl.updateFamily(CommonDAOImpl.java:40)
bei
com.bigg.nihonbare.common.service.impl.CommonServiceImpl.updateFamily(CommonServiceImpl.java:55)
bei
com.bigg.nihonbare.util.flow.DynaRowHibernateUpdateHandler.handleRow(DynaRowHibernateUpdateHandler.java:72)

HINWEIS : In meinen DAOs ich nur haben Methoden wie;

return (Long) this.getHibernateTemplate().save(family);

return (Family) this.getHibernateTemplate().execute(
                new HibernateCallback() {
                    public Object doInHibernate(Session session) {
                        Criteria criteria = session
                                .createCriteria(Family.class);
                        criteria.add(Expression.eq("familyId", familyId));
                        if (criteria.list().size() > 0) {
                            return criteria.list().get(0);
                        }
                        return null;
                    }
});
Schreibe einen Kommentar