2011-03-22 14 views
6

मेरे पास लोगों नामक एक 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) 
    } 
} 

लेकिन मैं कहीं भी लोगों को नहीं कह सकता ..hchChild() कहीं भी। क्या आप कृपया इस पर मुझे खुश कर सकते हैं? आपको बहुत - बहुत धन्यवाद!

उत्तर

4

ऐसा इसलिए है क्योंकि eq ('parentPeople', People) में, Grails समझ नहीं सकते कि "लोग" क्या है (यह एक वर्ग है)। आपको this द्वारा "लोग" को प्रतिस्थापित करना चाहिए। उदाहरण के लिए:

static transients = ["children"] 

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

आप के रूप में अच्छी तरह से एक सेटर कर सकते हैं:

कुछ इस तरह का प्रयास करें? –

0

एक ही परिणाम प्राप्त करने का एक और तरीका Named Queries का उपयोग करना है। यह अधिक संक्षिप्त लगता है और विशेष रूप से इस उद्देश्य के लिए बनाया गया था। मुझे यह भी पसंद है क्योंकि यह एक डोमेन मॉडल में स्थिर घोषणाओं के पैटर्न को फिट करता है और यह अनिवार्य रूप से एक मानदंड है, जिसका उपयोग मैं अपने पूरे अनुप्रयोगों में करता हूं। एक क्षणिक घोषित करने के बाद एक बंद लिखना एक काम के आसपास लगता है जब आप नामित प्रश्न घोषित कर सकते हैं ... बस मेरी राय।

static namedQueries = { 
    getChildren { 
     projections { 
      count "parentPeople" 
     } 
    } 
} 
संबंधित मुद्दे