2010-05-25 43 views
3

我有這種模式:如何查詢繼承的對象的集合Grails中一個特定的對象類型?

class Question{ 
    Set components 
    static hasMany = [components: QuestionComponent] 
} 

class QuestionComponent{ 
    static belongsTo = Question 
} 

class QuestionComponentStatus extends QuestionComponent{ 

} 
class QuestionComponentOther extends QuestionComponent{ 

} 

我想從集部件只得到QuestionComponentStatus:

questionInstance.components。 ?

非常感謝

回答

1

你可以做一個查詢直接在子類,以避免多態的結果。只要您的一個一對多的關係是雙向的(即static belongsTo = [question: Question]),你可以這樣做:

QuestionComponentStatus.findAllByQuestion(q) 

或HQL:

QuestionComponentStatus.findAll("FROM QuestionComponentStatus WHERE question = :question", [question: q]) 
+0

好吧,我這樣做,但它不是可以這樣做: questionInstance.components 。每個{...} 感謝 – 2010-05-25 12:31:29

+1

不,我不這樣想。你當然可以這樣做'questionInstance.components.findAll {it.class == QuestionComponentStatus.class}',但是這將會從該數據庫中的所有組件,然後再把它們進行過濾。作爲替代方案,可以使接口通過引入一個自定義的getter是否過濾組件列表,例如更好。 '高清getStatusComponents(){QuestionComponentStatus.findAllByQuestion(這)}''你的類Question'裏面。 – 2010-05-25 13:29:40

相關問題