我有一个 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();
}
在这种情况下,我对在返回父项集合之前完全获取与父项(站)相关的子项(观察)集合不感兴趣。然而,在响应中返回父(站)对象的集合之前,似乎有一些尝试完全获取这些子(观察)对象,但由于原始会话不再可用,因此失败了。
谁能建议我如何解决这个错误?也许有一种方法可以在请求的整个生命周期内保持会话?
在此先感谢您的帮助!
- 詹姆士