【问题标题】:Grails: eager loading doesn't workGrails:急切加载不起作用
【发布时间】:2011-05-16 02:51:27
【问题描述】:

我想从 main.gsp 中的用户对象访问组织列表:

<g:select name="effectiveOrganisation"
from="${session.user.organisations}" optionKey="id" optionValue="name"
value="${session.effectiveOrganisation?.id}" />

用户对象由以下类定义:

class SystemUser {

    static hasMany = [organisations: Organisation]
    static belongsTo = [Organisation]
    static mapping = {
        organisations lazy: false
    }

}

但是当我执行我的代码时,我得到:

Exception Message: could not initialize proxy - no Session
Caused by: Error executing tag <g:form>: 
Error executing tag <g:select>: could not initialize proxy - no Session

为什么渴望在这里不起作用?

【问题讨论】:

  • 您确定这是急切获取的问题吗?看起来更像是 Session 的问题。
  • 在访问急切获取的属性时,会话是否应该无关紧要?
  • 是的。 Http session 无关紧要(不是 Hibernate Session)。我建议 http 会话而不是 Hibernate 会话存在问题 - 所以你甚至没有进入休眠状态。换句话说 - 你得到的错误信息与我怀疑的 GORM 无关。
  • 我指的是休眠会话。 http 会话适用于其他 http 会话属性。
  • 如果不急切地获取它是否可以工作?

标签: java hibernate grails grails-orm eager-loading


【解决方案1】:

从您的代码中并不清楚,但我将假设您在这里基于 belongsTo 属性有一个多对多。

我已经设法用 Grails 1.3.5 重现了这一点。该问题似乎只影响具有belongsTo 属性的关系的一侧。如果您尝试对组织 -> 用户使用相同的代码,它会起作用。

解决方法很奇怪:使Organization 上的users 集合也非惰性。

这个必须进入 GORM Gotchas 系列!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-25
    • 1970-01-01
    相关资源
    最近更新 更多