0

错误:

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 

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

4

1 回答 1

2

你有几个选择:

  • 使用fetch=FetchType.EAGER- 如果集合不太可能包含太多对象,而其中又包含其他集合,这是最简单的选择 - 您只需从数据库中获取它们及其所有者

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

  • Hibernate.initialize(collection)会话关闭之前(以及在事务提交之前)使用 - 这是手动的,并且会污染代码,因此不太可取

于 2011-01-22T07:48:19.753 回答