我有一个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对象的集合(“children”)。
Station实体的DAO类,StationDao对于被调用的方法有一个以下代码,findAll():
private SessionFactory sessionFactory;
private Class<T> persistentClass;
public List<T> findAll()
{
return getCurrentSession().createQuery("from " + persistentClass.getName()).list();
}
在这种情况下,我不感兴趣收集与父母(站点)相关的儿童(观察)在收集父母的回归之前被完全取出。但是,似乎有一些尝试在返回响应中的父(站)对象集合之前完全获取这些子(观察)对象,并且由于原始会话不再可用而失败。
有谁能建议我如何解决这个错误?也许有一种方法可以在请求的整个生命周期内保持会话?
提前感谢您的帮助!
- 詹姆斯
答案 0 :(得分:0)
我遇到“懒得初始化角色集合”的情况是由于在调用后使用持久对象引起的
HibernateTemplate.clear()
即使会话仍处于活动状态,旧的对象也没有。解决问题的一种可能方法是再次从会话中获取对象。