gpt4 book ai didi

java - Spring HibernateDaoSupport : lazy-loading problem?

转载 作者:行者123 更新时间:2023-12-01 19:24:24 28 4
gpt4 key购买 nike

您好,在我的域模型中,

“家族”有很多“子家族”“亚科”有很多“轨迹”

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

即。 'Locus' 可以使用 alocus.getSubFamily() 在父级 'SubFamily' 中访问;

在下面的代码片段中,我给出了 DAO 方法来检索 Locus 。

在我的网络应用程序中(基于 Wicket)

我从 DAO 获取轨迹,然后尝试将 SubFamily 获取为:

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;
}
});
}

最佳答案

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

关于java - Spring HibernateDaoSupport : lazy-loading problem?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2235443/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com