【问题标题】:Parent-Child lazy get of child ids父子懒惰获取子ID
【发布时间】:2011-03-21 13:17:25
【问题描述】:

我有一个父子关系,其中父母有很多孩子,孩子属于父母。获取模式是默认的(惰性)。当我获取父项时,sql 相当于“select * from child where parent_id = ?”也被执行 - 也就是说,它获取所有相关子项的每个字段。 (这是懒惰的行为吗?)我需要禁止对孩子的所有字段的查询,因为那里有我不想得到的 clob,除非我明确通过 id 获取孩子。我怎样才能做到这一点?我是否必须创建另一个没有 clob 属性的“摘要”域子类?

【问题讨论】:

    标签: grails parent-child grails-orm


    【解决方案1】:

    我认为您已经解决了延迟加载问题,所以我不会对此发表评论。

    我处理仅从子项中获取某些数据的问题的方法是编写一个自定义 hql 查询,该查询仅返回您感兴趣的值。因此,如果您只需要子项的 id,请执行一些操作类似的查询

    Child.findAll("select c.id from Child c where parent = :parent", [parent: theParent])
    

    http://grails.org/doc/latest/ref/Domain%20Classes/executeQuery.html

    【讨论】:

      【解决方案2】:

      您知道它可以一次性获取所有内容吗?我问这个是因为,一旦您开始使用调试器、println、日志记录来查看数据,以便向您显示内容,Grails 认为您已经请求了该数据,并将去获取它。所以它可能是延迟加载的,但你是在告诉 Grails 去获取它,同时你试图验证它没有被获取。

      【讨论】:

      • 我只是在 Datasource.groovy 中设置了 logSql = true,并且我正在使用标准的脚手架,它通过父级的 id 获取。
      【解决方案3】:

      啊,但是,我明白了。 “show”的默认视图是访问子属性。 现在,当呈现为 XML 或 JSON 时,我也看到了相同的行为,但这可能是一个类似的问题 - 正在询问子属性?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-15
        • 2017-02-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-10
        相关资源
        最近更新 更多