Hibernate LazyInitializationException:懒得初始化一个角色集合

时间:2010-10-18 20:12:11

标签: hibernate orm lazy-loading one-to-many many-to-one

我有一个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();
}

在这种情况下,我不感兴趣收集与父母(站点)相关的儿童(观察)在收集父母的回归之前被完全取出。但是,似乎有一些尝试在返回响应中的父(站)对象集合之前完全获取这些子(观察)对象,并且由于原始会话不再可用而失败。

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

提前感谢您的帮助!

- 詹姆斯

1 个答案:

答案 0 :(得分:0)

我遇到“懒得初始化角色集合”的情况是由于在调用后使用持久对象引起的

HibernateTemplate.clear()

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