在 Alfresco 3 上刷新页面时出现 LazyInit 异常(Hibernate 3 + Spring)
LazyInit Exception when Refreshing a page on Alfresco 3 (Hibernate 3 + Spring)
我在 Alfresco(第 3 版,使用 hibernate 3 + spring)的特定层上遇到了以下问题:
首次加载页面时,一切正常。没问题。
当我们在此页面上进行导致刷新的交互时,我们有一些
lazyinitializationexception could not initialize proxy - no session
.
我知道 lazyinit 是一个常见问题。但由于我们只想在特定图层上进行更改,而不是在露天图层上进行更改,因此无法应用许多分辨率。
强制会话保持打开状态对我们来说是不可能的。
使用Hibernate.Initialize
的那个会导致这个错误:
User:admin ERROR [org.hibernate.LazyInitializationException] failed to lazily initialize a collection of role: org.jbpm.taskmgmt.exe.TaskInstance.variableInstances, no session or session was closed
所以我得到了三个问题:
- 有人知道为什么在第一次加载时我们没有问题,而在刷新时却出现 lazyInit 异常吗?
- 我们怎样才能让 hibernate.initialize 发挥作用?
- 还有其他方法可以解决这个问题吗?
再多说一点上下文:
我们想通过 IHM 向用户显示任务历史记录。为此,我们填充一个 table,为此我们收集当前的 taskInstance ti 和之前的任务实例,并为它们中的每一个执行 ti.GetName()
、ti.GetDescription()
等。这个问题似乎来吧,在收集完Task Instances后,hibernate session关闭了,所以我们无法对ti进行ti.GetName()
等操作。
预先感谢大家的帮助,
此致
好的,经过很多天的努力,我们终于找到了解决方法。刚好在我写的绝望的时候同事解决了post :)
所以解决方案是使用
getHibernateTemplate().Hibernate.Initialize(ti.GetName());
直接在 DAO 的回调部分 class。
希望它对其他人有用,感谢您的帮助,我总是不确定我是否应该 post 代码以保持 post 简单。
我在 Alfresco(第 3 版,使用 hibernate 3 + spring)的特定层上遇到了以下问题:
首次加载页面时,一切正常。没问题。
当我们在此页面上进行导致刷新的交互时,我们有一些
lazyinitializationexception could not initialize proxy - no session
.
我知道 lazyinit 是一个常见问题。但由于我们只想在特定图层上进行更改,而不是在露天图层上进行更改,因此无法应用许多分辨率。
强制会话保持打开状态对我们来说是不可能的。
使用Hibernate.Initialize
的那个会导致这个错误:
User:admin ERROR [org.hibernate.LazyInitializationException] failed to lazily initialize a collection of role: org.jbpm.taskmgmt.exe.TaskInstance.variableInstances, no session or session was closed
所以我得到了三个问题:
- 有人知道为什么在第一次加载时我们没有问题,而在刷新时却出现 lazyInit 异常吗?
- 我们怎样才能让 hibernate.initialize 发挥作用?
- 还有其他方法可以解决这个问题吗?
再多说一点上下文:
我们想通过 IHM 向用户显示任务历史记录。为此,我们填充一个 table,为此我们收集当前的 taskInstance ti 和之前的任务实例,并为它们中的每一个执行 ti.GetName()
、ti.GetDescription()
等。这个问题似乎来吧,在收集完Task Instances后,hibernate session关闭了,所以我们无法对ti进行ti.GetName()
等操作。
预先感谢大家的帮助, 此致
好的,经过很多天的努力,我们终于找到了解决方法。刚好在我写的绝望的时候同事解决了post :)
所以解决方案是使用
getHibernateTemplate().Hibernate.Initialize(ti.GetName());
直接在 DAO 的回调部分 class。
希望它对其他人有用,感谢您的帮助,我总是不确定我是否应该 post 代码以保持 post 简单。