Java Spring HibernateDaoSupport:延迟加载问题?

Java Spring HibernateDaoSupport:延迟加载问题?,java,hibernate,spring,Java,Hibernate,Spring,您好, 在我的领域模型中 “家族”有许多“亚家族” “亚家族”有许多“基因座” 并且关系是双向的,具有延迟加载 也就是说,“Locus”可以使用alocus.getSubFamily()访问父“SubFamily” 在下面的代码片段中,我给出了检索轨迹的DAO方法 在我的Web应用程序中(基于Wicket) 我从DAO中获得轨迹,然后尝试获得如下子家族: Locus alocus = dao.getLocusByLocusId(alocusid); SubFamily asubfamily=al

您好, 在我的领域模型中

“家族”有许多“亚家族” “亚家族”有许多“基因座”

并且关系是双向的,具有延迟加载

也就是说,“Locus”可以使用alocus.getSubFamily()访问父“SubFamily”

在下面的代码片段中,我给出了检索轨迹的DAO方法

在我的Web应用程序中(基于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$$enhancerbyglib$$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;
                    }
                });
    }

很明显,调用此方法时Hibernate会话未打开。您使用的是Spring+Hibernate还是仅使用Hibernate?如果您使用的是Spring,请尝试使用Spring在web.xml中提供的OpenSessionInView筛选器。筛选器类为org.springframework.orm.hibernate3.support.OpenSessionInViewFilter。
如果您没有使用spring,请提供有关会话打开和关闭的时间和地点的更多详细信息。

很明显,调用此方法时Hibernate会话未打开。您是使用spring+Hibernate还是仅使用Hibernate?如果您使用spring,请尝试使用我们中spring提供的OpenSessionInView筛选器b、 过滤类是org.springframework.orm.hibernate3.support.OpenSessionInViewFilter。
如果不使用spring,请提供有关会话打开和关闭的时间和地点的更多详细信息。

我使用的是spring Hibernate OSupport,我感到困惑。.在没有OSV筛选器的情况下,Hibernate会话在哪里关闭和打开?回调将使用“active”hibernate会话(如果存在)。如果没有,则会话将在回调本身中创建、使用和关闭。如果要使用回调外部的返回对象进行hibernate查询,则需要将对象与活动会话重新关联。我建议尽可能使用更干净、经验证的OSV方法。Elister:当我试图通过独立的java应用程序访问DAO时,我面临同样的问题。需要做些什么才能摆脱它?我使用的是SPring HibernateDAOSupport,我很困惑。没有OSV筛选器,Hibernate会话在哪里关闭和打开?回调将使用“active”hibernate会话(如果存在)。如果没有,则会话将在回调本身中创建、使用和关闭。如果要使用回调外部的返回对象进行hibernate查询,则需要将对象与活动会话重新关联。我建议尽可能使用更干净、经验证的OSV方法。Elister:当我试图通过独立的java应用程序访问DAO时,我面临着同样的问题。需要做些什么来摆脱它?