2011-01-22 50 views
0

错误:Grails的Hibernate的Session麻烦 - 无法懒洋洋地初始化集合

Error 500: null 
Servlet: 
URI: 
Exception Message: failed to lazily initialize a collection of role: Student.lockers, no session or session was closed 
Caused by: Error executing tag <g:render>: Error executing tag <g:link>: failed to lazily initialize a collection of role: com.itzik.User.carts, no session or session was closed at grails-app/views/shared/_navigation.gsp:18 at grails-app/views/layouts/home.gsp:26 

所以我有一个学生(有许多储物柜)。现在,当学生登录安全服务处理将它们放入会话中。然后我的主控制器检查是否有主动锁柜。如果没有,它会为他们创建一个。现在由于某种原因,这对学生 - >储物柜的关系感到窒息。

回答

2

您有几种选择:

  • 使用fetch=FetchType.EAGER - 如果集合是不太可能包含太多的对象,这反过来又对他们有其他收藏品,这是最简单的选择 - 你只是接他们从数据库中与它们的主人

  • 使用OpenSessionInView在一起 - 这将需要一些配置的时候,但你可能最终需要它,即使不是这种特殊情况。我无法确切地告诉你如何在grails中配置OSIV。

  • 使用Hibernate.initialize(collection)会话关闭之前(和之前的事务提交) - 这是手动的,又污染了代码,所以

+0

你能解释一下这些选项的好处可能是什么不太可取? – 2011-01-22 08:00:32

相关问题