Java Grails Hibernate会话问题-未能延迟初始化集合
错误:Java Grails Hibernate会话问题-未能延迟初始化集合,java,hibernate,grails,grails-domain-class,Java,Hibernate,Grails,Grails Domain Class,错误: 错误500:null Servlet: URI: 异常消息:未能延迟初始化角色集合:Student.lockers,未关闭任何会话或会话 原因:执行标记时出错:执行标记时出错:未能延迟初始化角色集合:com.itzik.User.carts,grails app/views/shared/_navigation上未关闭任何会话或会话。grails app/views/layouts/home上的gsp:18。gsp:26 所以我有一个学生(有很多储物柜)。现在,当学生登录安全服务时,将
错误500:null
Servlet:
URI:
异常消息:未能延迟初始化角色集合:Student.lockers,未关闭任何会话或会话
原因:执行标记时出错:执行标记时出错:未能延迟初始化角色集合:com.itzik.User.carts,grails app/views/shared/_navigation上未关闭任何会话或会话。grails app/views/layouts/home上的gsp:18。gsp:26
所以我有一个学生(有很多储物柜)。现在,当学生登录安全服务时,将处理将他们放入会话的问题。然后我的主控制器检查他们是否有活动的储物柜。如果不是,它会为他们创建一个。现在,由于某种原因,它扼杀了学生与储物柜的关系 您有几种选择:
- 使用
-如果集合不太可能包含太多的对象,而这些对象又包含其他集合,那么这是最简单的选择-您只需将它们与它们的所有者一起从数据库中取出即可fetch=FetchType.EAGER
- 使用-这将需要一些配置时间,但您最终可能需要它,即使不是针对这种特定情况。不过,我不能确切地告诉您如何在grails中配置OSIV
- 在会话关闭(以及提交事务之前)之前使用
——这是手动操作,会污染代码,因此不太可取Hibernate.initialize(collection)
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