我有一种父子关系,其中父hasMany子项和子项belongsTo父项。获取模式是默认的(惰性)。当我对父级执行get时,sql等价于"select * from child where parent_id = ?“也就是说,它获取所有相关子项的每个字段。(这是懒惰的行为吗?)我需要抑制对子对象所有字段的查询,因为其中有clobs,除非我明确地通过id获取该子对象,否则我不想获取这些clobs。我如何才能做到这一点?我必须创建另一个没有clob属性的“摘要”域子类吗?
发布于 2011-03-21 23:50:49
我想你已经解决了延迟加载的问题,所以我不会对此发表评论。
我处理仅从子对象中获取特定数据的方法是编写一个定制的hql查询,该查询只返回您感兴趣的值。因此,如果您只需要孩子的ids,那么可以执行类似这样的查询
Child.findAll("select c.id from Child c where parent = :parent", [parent: theParent])参见http://grails.org/doc/latest/ref/Domain%20Classes/executeQuery.html。
发布于 2011-03-21 21:34:51
你知道吗,它是一下子把它们都弄到手的?我之所以这样问,是因为一旦您开始使用调试器、println、logging来窥探数据,以便显示内容,Grails就会认为您已经请求了该数据,并会去获取它。因此,它可能是延迟加载的,但在您尝试验证它是否未被获取时,您告诉Grails去获取它。
发布于 2011-03-21 22:00:36
啊,但是,我明白这一点。"show“的默认视图是访问子属性。现在,当呈现为XML或JSON时,我也看到了相同的行为,但这可能是一个类似的问题-正在询问子属性?
https://stackoverflow.com/questions/5378099
复制相似问题