Hibernate 冬眠4。无法初始化代理-没有会话

Hibernate 冬眠4。无法初始化代理-没有会话,hibernate,lazy-loading,lazy-initialization,Hibernate,Lazy Loading,Lazy Initialization,我知道这个错误很常见,但我已经搜索过了,似乎什么都不起作用 我在选项实体childrenOptions和parentOption中有一个递归关系,作为延迟加载,我通过HQL查询加载一个平面列表,如下所示: Session session = sessionFactory.openSession(); session.beginTransaction(); List result = session.createQuery("from Option as o").list(); session

我知道这个错误很常见,但我已经搜索过了,似乎什么都不起作用

我在选项实体childrenOptions和parentOption中有一个递归关系,作为延迟加载,我通过HQL查询加载一个平面列表,如下所示:

Session session = sessionFactory.openSession();
session.beginTransaction();

List result = session.createQuery("from Option as o").list();

session.getTransaction().commit();
session.close();
return result;
我试图在Hibernate会话之外手动构建用户的选项树,因为它依赖于以前加载的其他角色实体

所以,当我尝试使用getChildrenOptions属性来添加子选项时,我发现无法初始化代理-没有会话错误

我已经尝试过session.execute和.getHibernateLazyInitializer.getImplementation,但是

这总是错误的

是否有可能无法/删除此代理行为,并像普通POJO一样使用集合属性

这似乎是一个性能问题,急于加载所有选项,我想建立自己的树


提前感谢。

您必须在会话仍处于打开状态时立即获取所有这些实体,或者必须让会话对返回列表的使用者保持打开状态,并且只有在他完成构建树时才能关闭会话。您正在加载包含惰性加载实体的列表,然后关闭会话,然后,您将它发送给其他代码,这些代码将尝试遍历该列表以构建树-当然,它会抱怨会话已经关闭。

在您完成您的内容之前不关闭会话就足够了。谢谢@dierre,我想Hibernate会在getChildrenOptions.add中访问数据库并延迟加载childrenOptions集合。。。行,如果会话仍然打开;基本上我已经在内存中过滤了选项抱歉,这在简化的hql中并不明显,我所需要做的就是构建树。也许我的帮助会帮助你。谢谢@ClayFowler,我完全理解你。换言之,我的问题是:是否有可能打断绑定或将我的对象从其代理中分离出来,以便使用它来构建选项子集?谢谢你的帮助!在会话仍处于打开状态时构建树,或者急于获取所有内容以返回到外部树生成器。
if (option instanceof HibernateProxy)