问候, 在我的域模型中,
'家庭'有许多'SubFamily' 'SubFamily'有很多'Locus's
和懒惰加载的关系是双向的。
即。 'locus'可以使用alocus.getSubFamily()在父级'SubFamily'中访问;
在下面的片段中,我已经使用DAO方法来检索轨迹。
在我的网络应用程序中(基于Wicket)
我从DAO获得基因座,然后尝试将SubFamily作为:
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;
}
});
}
答案 0 :(得分:4)
很明显,在调用此方法时,Hibernate会话未打开。您使用的是Spring + Hibernate还是仅使用Hibernate?如果您使用的是spring,请尝试使用Spring在web.xml中提供的OpenSessionInView过滤器。过滤器类是org.springframework.orm.hibernate3.support.OpenSessionInViewFilter。 其他明智的是,如果您不使用spring,请提供有关会话打开和关闭的时间和地点的更多详细信息。