2012-11-27 18 views
36

क्या डोमेन क्लास प्रॉपर्टी में डिफ़ॉल्ट मान सेट करने का कोई तरीका है? मेरे पास पेम विधि नामक एक कक्षा है, जहां मैं 'नाम' संपत्ति को 'नकद' में डिफ़ॉल्ट रूप से चाहता हूं। और जब मैं यह तालिका बनाता हूं, तो मैं यह डिफ़ॉल्ट मान चाहता हूं, क्या यह बाधाओं का उपयोग कर संभव है?मैं grails डोमेन क्लास में डिफ़ॉल्ट मान कैसे सेट कर सकता हूं

package abc 

import util.UserUtil 
import embed.AuditUser 

class PayMethod { 

    String name = "Cash" 

    AuditUser audit = new AuditUser() 
    static embedded = ['audit']  

    static constraints = { 
     name blank: false, size: 5..30, unique: true 
    } 

    static mapping = { 
     table 't01i0010' 
     id column: 'F_ID', precision: 4, scale: 0 
     name column: 'F_NAME', length: 30, defaultValue: 'Cash' 
     version column: 'F_REVISION' 
    } 

    def authUserService 
    int insertIndex = 0 
    int updateIndex = 0 
    static transients = ['authUserService', 'insertIndex', 'updateIndex']  

    def beforeInsert = { 
     audit.entryUser = UserUtil.user() 
     audit.entryDate = new Date(); 
    } 

    def beforeUpdate = { 
     audit.reviseUser = UserUtil.user() 
     audit.reviseDate = new Date(); 
    } 

    def afterInsert = { 
     if(insertIndex == 0){ 
      def user = audit.entryUser 
      def date = audit.entryDate 
      log.info "POST INSERT => ENTERER: ${user} ENTERED: ${date}" 
     } 
     insertIndex++ 
    } 

    def afterUpdate = { 
     if(updateIndex == 0){ 
      def user = audit.reviseUser 
      def date = audit.reviseDate 
      log.info "POST UPDATE => REVISE: ${user} REVISED: ${date}" 
     } 
     updateIndex++ 
    } 
} 

उत्तर

48

यह 2.2 में संभव होगा जिसे इस सप्ताह या अगले महीने जारी किया जाना चाहिए। प्रासंगिक सुविधा अनुरोध के लिए http://jira.grails.org/browse/GRAILS-5520 देखें। वाक्य रचना हो जाएगा

static mapping = { 
    name defaultValue: "'Cash'" 
} 

के लिए अब आप आप क्या कर रहे करने की आवश्यकता होगी - क्षेत्र का डिफ़ॉल्ट मान के रूप में मान सेट करें। आप डेटाबेस स्कीमा मैन्युअल रूप से अद्यतन कर सकते हैं, या माइग्रेशन के हिस्से के रूप में काम कर सकते हैं।

+0

यह काम नहीं कर रहा है, मैं डेटाबेस में डिफ़ॉल्ट रूप से नाम = 'नकद' सेट करना चाहता हूं जब मैं इस तालिका को बना देता हूं –

+0

'defaultValue' का उपयोग कर काम नहीं कर रहा है? जैसा कि मैंने कहा, यह केवल 2.2 में काम करेगा जो अभी तक जारी नहीं किया गया है। तब तक आप डेटाबेस को मैन्युअल रूप से अपडेट कर सकते हैं। –

+0

हमें वहां नेस्टेड सिंगल कोट्स क्यों डालना है ??? – Philippe

18

पिछले उत्तर पर निर्माण करने के लिए, आप Grails 2.2 में डिफ़ॉल्ट वैल्यू विशेषता का उपयोग कर सकते हैं, लेकिन आपको स्ट्रिंग गुणों और पूर्णांक गुणों के चारों ओर डबल कोट्स के लिए डिफ़ॉल्ट मानों के चारों ओर डबल और सिंगल कोट्स डालने के लिए सावधान रहना चाहिए ताकि डिफ़ॉल्ट मान दिखाई दे सकें सही ढंग से डीडीएल में। तो, उदाहरण के लिए, आप का उपयोग करने की आवश्यकता है:

static mapping = { 
    myStringProperty defaultValue: "'Cash'" 
    myIntProperty defaultValue: "0" 
} 

आप केवल एकल उद्धरण का उपयोग करते हैं, तो आप की तरह "कॉलम" नकदी "नहीं मिला" एक त्रुटि के साथ खत्म हो जाएगा इसके अलावा, जहाँ तक मैं, बता सकते हैं के रूप में डिफ़ॉल्ट मान गुणों के लिए काम नहीं करते हैं जो enums हैं।

3

एक ही समस्या थी और स्थिर मैपिंग का उपयोग करने के लिए मेरे लिए काम नहीं किया (2.2.3 का उपयोग कर); नीचे दिए गए लिंक मुझे एक कार्यात्मक जवाब (आपका वस्तु घोषणाओं में डिफ़ॉल्ट मान सेट) प्रदान की:

http://grails.1312388.n4.nabble.com/How-to-set-a-default-value-for-column-td1383753.html

स्ट्रिंग के लिए, उद्धरण के साथ संपुटित; int/integer केवल मूल्य होना चाहिए।

आशा है कि इससे मदद मिलती है!

संबंधित मुद्दे