2011-03-22 64 views
6

我有一個名爲People的Grails域,我想檢查每個人是否有子女。孩子是其他人物。這是我的域名結構:Grails域中的瞬態屬性

class People implements Serializable { 

    static constraints = { 
     name (nullable : false, unique : true) 
     createdBy (nullable : false) 
     creationDate (nullable : false) 
    } 

    static transients = ['hasChild'] 

    static mapping = { 
     table 'PEOPLE' 
     id generator: 'sequence', params : [sequence : 'SEQ_PK_ID'] 
     columns { 
      id column : 'APEOPLE_ID' 
      parentPeople column : 'PARENT_PEOPLE_ID' 
     } 
     parentPeople lazy : false 
    } 

    People parentPeople 
    String name 
    String description 

    Boolean hasChild() { 
     def childPeoples = People.createCriteria().count { 
      eq ('parentPeople', People) 
     } 
     return (childPeoples > 0) 
    } 
} 

但我不能在任何地方調用people.hasChild()。你能幫我解決這個問題嗎?非常感謝!

回答

4

這是因爲在eq ('parentPeople', People)中,Grails無法理解「People」是什麼(它是一個類)。你應該用this替換「人物」。例如:

static transients = ["children"] 

    def getChildren() { 
     def childPeoples = People.findAllByParentPeople(this, [sort:'id',order:'asc']) 
    } 
+0

可以執行制定者呢? – 2012-12-21 18:33:22

0

另一種方式來獲得相同的結果是使用Named Queries。它看起來更簡潔,並且是專門爲此目的而創建的。我也喜歡它,因爲它適合領域模型中靜態聲明的模式,它本質上是一個標準,我在整個應用程序中使用它。聲明一個瞬態,然後編寫一個閉包似乎是一個解決方法,當你可以聲明命名查詢......只是我的意見。

嘗試是這樣的:

static namedQueries = { 
    getChildren { 
     projections { 
      count "parentPeople" 
     } 
    } 
}