2011-11-06 17 views
7

मैं बहुत एक समाधान के करीब रहा हूँ लेकिन कुछ भी अभी भी गलत अग्रिम धन्यवाद है, सहायता प्राप्त करने की उम्मीद है,।grails समग्र "अद्वितीय बाधा", लेकिन कैसे?

class BoCustomer implements Serializable{ 

    String firstName 
    String lastName 
    String emailID 
    Company company 
} 

तो, मैं एक प्राथमिक कुंजी = "आईडी" कि ठीक है है:

मैं की तरह एक ग्राहक के डोमेन का मॉडल है। "एक कंपनी के लिए केवल एक अद्वितीय ईमेल पता" इतना है कि एक ही ईमेल डालने अनुमति दी जानी चाहिए, लेकिन केवल विभिन्न कंपनियों के लिए: तो आगे मैं तरह का अनूठा बाधा है कि "चेक" निम्नलिखित की जरूरत है। सम्मिलित करना ([email protected], कंपनी आईडी: 1) और डालने ([email protected], कंपनी आईडी: 1) की अनुमति नहीं है, लेकिन डालने ([email protected], कंपनी आईडी: 1) और डालने ([email protected], कंपनी आईडी: 2) की अनुमति दी है।

तो मैं अब तक की कोशिश की:

static mapping = { 
    id column: "customer_id", generator: "identity" 
    emailcompany composite: ['emailID', 'company'], unique: true 
} 

("अच्छा" प्रतीत हो रहा है, लेकिन नहीं मैं वास्तव में क्या चाहते हैं)

लेकिन मैं एक और स्तंभ नहीं चाहते हैं, मेरी कोशिश में कहा जाता है " emailcompany "- लेकिन मुझे एक अद्वितीय बाधा की तरह कुछ चाहिए।

उत्तर

1

यदि आप इसे बाधा के साथ लागू करना चाहते हैं, तो आप एक कस्टम सत्यापनकर्ता का उपयोग करने में सक्षम होना चाहिए ताकि यह एक ही ईमेल आईडी और कंपनी के साथ पहले से मौजूद BoCustmer मौजूद हो। थोड़ा समय हो मैं इसे का उपयोग किया है के बाद से किया गया है, लेकिन मुझे लगता है कि कुछ इस तरह काम करना चाहिए: unique

class BoCustomer implements Serializable{ 

    String firstName 
    String lastName 
    String emailID 
    Company company 

    static constraints = { 
     emailID(unique: 'company') 
      // OR 
     company(unique: 'emailID') 
    } 
} 

आप कर सकते हैं:

class BoCustomer implements Serializable{ 
    String firstName 
    String lastName 
    String emailID 
    Company company 

    static constraints = { 
     emailID( 
      validator: { val, obj -> 
       def customerWithSameEmailAndCompany = BoCustomer.findByEmailIDAndCompany(obj.emailID, obj.company) 
       return !customerWithSameEmailAndCompany 
      } 
     ) 
    } 
} 
+0

अरे कालेब, आपके उत्तर के लिए धन्यवाद, लेकिन मुझे खेद है। मैं अपने कोड की कोशिश की लेकिन यह अभी भी दो बार (और अधिक) एक ही कंपनी आईडी के साथ एक ही ई-मेल को जोड़ने के लिए – grailsInvas0r

+0

:-(आप .save() कॉल करने से पहले एक .validate() BoCustomer उदाहरण पर चलने करो संभव है? और अगर हां, तो सत्यापित करें के लौटने सच –

+0

हाँ मैं एक .validate() .save कॉल करने से पहले() चलाने और यह लौटा रहा है "सही" हाँ, मैं इसे डिबगर ब्रेकपाइंट और एक परीक्षण चर के साथ की जाँच - यह सच दुर्भाग्य से लौटा रहा है:। - \ – grailsInvas0r

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

  • कोई संबंधित समस्या नहीं^_^