2011-03-21 134 views
1

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

回答

0

你知道一个事实,它是一次得到它们吗?我问这个问题是因为,一旦你开始使用调试器,println,日志记录来查看数据,为了向你显示内容,Grails认为你已经请求了这些数据,并且会去取数据。所以它可能是懒惰的加载,但是当你试图验证它没有被抓取时,你告诉Grails去获取它。

+0

我只是在Datasource.groovy中设置了logSql = true,并且我点击了标准脚手架,它通过父代的id获取。 – jay 2011-03-21 13:56:18

0

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

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