0

我有一个 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。Station 实体(“父级”)包含 Observations 对象(“子级”)的集合。

Station 实体的 DAO 类,StationDao 的调用方法 findAll() 具有以下代码:

private SessionFactory sessionFactory;

private Class<T> persistentClass;

public List<T> findAll()
{
    return getCurrentSession().createQuery("from " + persistentClass.getName()).list();
}

在这种情况下,我对在返回父项集合之前完全获取与父项(站)相关的子项(观察)集合不感兴趣。然而,在响应中返回父(站)对象的集合之前,似乎有一些尝试完全获取这些子(观察)对象,但由于原始会话不再可用,因此失败了。

谁能建议我如何解决这个错误?也许有一种方法可以在请求的整个生命周期内保持会话?

在此先感谢您的帮助!

- 詹姆士

4

1 回答 1

0

当“无法延迟初始化角色集合”是由调用后使用持久对象引起的时,我遇到过这种情况

HibernateTemplate.clear()

即使会话仍然处于活动状态,旧对象也不是。解决问题的一种可能方法是再次从会话中获取对象。

于 2012-09-12T14:59:43.910 回答