我有一个web服务,它本质上是DAO的包装器。我正在调用web服务/DAO来请求一个实体集合。
“父”实体类包含“子”实体对象的集合,即一对多关系。获取“父”实体集合(即myDAO.findAll())的DAO方法调用返回时没有问题,但是web服务调用的最终结果是这个异常:
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: Station.observations, no session or session was closed一些背景信息:
我有两个实体: Station和Observations。工作站实体(“父”)包含一个Observations对象(“子”)的集合。
站点实体的DAO类StationDao具有用于被调用的方法findAll()的以下代码:
private SessionFactory sessionFactory;
private Class<T> persistentClass;
public List<T> findAll()
{
return getCurrentSession().createQuery("from " + persistentClass.getName()).list();
}在本例中,我对与父级(站)相关的子级(观察值)集合不感兴趣,因为在返回父级集合之前,父级(站)被完全获取。然而,似乎有人试图在响应中返回父(站)对象的集合之前完全获取这些子(观察值)对象,这是失败的,因为原始会话不再可用。
有没有人能建议我如何避免这个错误?也许有一种方法可以在请求的整个生命周期中保持会话?
提前感谢您的帮助!
--詹姆斯
发布于 2012-09-12 22:59:44
我曾经遇到过这样的情况:“懒惰地初始化角色集合失败”是由于在调用
HibernateTemplate.clear()即使会话仍处于活动状态,旧对象也不活动。解决这个问题的一种可能的方法是再次从会话中获取对象。
https://stackoverflow.com/questions/3962984
复制相似问题