1

我知道这个错误很常见,但我已经搜索过了,似乎没有任何效果。

我在Option实体(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.evict().getHibernateLazyInitializer().getImplementation(),但是

if (option instanceof HibernateProxy)

总是假的。

是否有可能无法/删除此代理行为并使用普通 POJO 之类的集合属性?

急切加载所有选项似乎是一个性能问题,我想自己构建树。

提前致谢。

4

1 回答 1

0

您必须在会话仍然打开时急切地获取所有这些实体,或者您必须为返回列表的使用者保持会话打开,并且仅在他完成构建树时关闭它。您正在加载充满延迟加载实体的列表,然后关闭会话,然后将其发送到其他代码,该代码将尝试遍历该列表以构建树 - 当然会抱怨会话已经关闭。

于 2012-10-02T21:31:23.167 回答