java - Grails Hibernate session 问题 - 未能延迟初始化集合

标签 java hibernate grails grails-domain-class

错误:

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 

所以我有一个学生(有很多储物柜)。现在,当学生登录时,安全服务会处理将他们放入 session 中。然后我的主 Controller 检查他们是否有 Activity 的储物柜。如果没有,它会为他们创建一个。现在由于某种原因,学生 –> 储物柜关系变得令人窒息。

最佳答案

您有多种选择:

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

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

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

关于java - Grails Hibernate session 问题 - 未能延迟初始化集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4766349/

相关文章:

java - Quartz 的配置参数可以在默认属性文件之外外部化吗?

hibernate - 构建/泊坞具有数据库连接的Spring Boot应用程序的最佳实践是什么?

mysql - 如何使用两个表和 LEFT JOIN 将 SQL 查询转换为 HQL 查询

Java 正则表达式 : find sequence of letter-digit combinations, 允许某些符号

java - Scala 无法访问 Java 内部类?

java - 确定一个方法是否使用反射覆盖另一个方法?

unit-testing - Grails getErrorCount()返回多个错误,如何获取错误列表?

java - EntityManager.createStoredProcedureQuery() 未解析

grails - 从 IntelliJ 中的 "Navigate Files"中排除项目\文件夹

Grails removeFrom() 问题