2011-03-21 130 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