2011-10-07 5 views
6

मैं एक ऐसी प्रणाली तैयार कर रहा हूं जिसमें उपयोगकर्ताओं के बीच पोस्ट/चर्चाएं टिकट बनने के लिए अपग्रेड की जा सकें। एक विशेष स्थान पर मैं एक-से-एक वैकल्पिक संबंध बनाने की कोशिश कर रहा हूं लेकिन कुछ मुद्दों पर चल रहा हूं। स्पॉटलाइट में इकाइयों का एक संघीय संस्करण नीचे दिया गया है।Grails/GORM: एक-से-एक वैकल्पिक संबंध बनाना

नियम:

  1. एक पोस्ट टिकट बन सकता है यदि आवश्यक हो। (वैकल्पिक)
  2. एक टिकट में एक पोस्ट होना चाहिए। (अनिवार्य)

Post.groovy

class Post { 

     String title 
     String description 
     String postedBy 

     Ticket ticket 

     static hasMany = [comments: Comment] 

    static constraints = { 
     title(blank:false) 
     description(blank:false) 
     postedBy(blank:false) 
     ticket (nullable:true,unique:true) 
    } 
} 

Ticket.groovy

class Ticket { 

     String title 
     String description 
     String postedBy 

     Post post 

     static hasMany = [responses: Response] 

     static constraints = { 
       title(blank:false) 
       description(blank:false) 
       postedBy(blank:false) 
       post (nullable:false,unique:true) 
     } 

} 

यह कुछ हद तक काम करता है। मैं कर सकते हैं:

  1. एक पोस्ट टिकट छोड़ने का श्रेय अशक्त बनाएं और जब पोस्ट एक टिकट
  2. मैं स्पष्ट रूप से माता पिता टिकट को इंगित करने के पोस्ट के टिकट विशेषता सेट कर सकते हैं बनने के लिए उन्नत बनाया है।

हालांकि, यह मानचित्रण डोमेन स्तर पर लागू नहीं किया गया है। यह ऐसी स्थिति के लिए जगह छोड़ देता है जहां टिकट 1 पोस्ट 1 पर इंगित करता है, लेकिन पोस्ट 1 अंक इसके बजाय टिकट 2 पर जाता है।

मैं टिकट कक्षा में एक static hasOne = [post: Post] उपयोग करने की कोशिश, लेकिन बाद में पता चला कि यह पोस्ट कक्षा में एक static belongsTo = [ticket: Ticket] की उपस्थिति अनिवार्य बनाता है और यह एक अनिवार्य 1 से 1 संबंध जो मैं क्या कर रहा हूँ नहीं है हो जाता है खोज रहे हैं

क्या इस परिदृश्य में 1-से-1 वैकल्पिक मैपिंग प्राप्त करने का कोई तरीका है? कोई भी पॉइंटर्स सबसे उपयोगी होगा।

+0

अगर आपकी संतुष्टि का उत्तर दिया गया है तो कृपया प्रश्न बंद करें। धन्यवाद! :-) – sbglasius

+0

यह काम नहीं करता है। मुझे नहीं लगता कि 1-1 बनाया जा सकता है। मुझे शायद इसे असंभव के रूप में बंद करना चाहिए? –

उत्तर

3

आप की तरह

class Post { 
    // Other fields 

    Ticket ticket 

    static constraints = { 
    // Other constraints 
    ticket (nullable:true,unique:true, validator: { val, obj -> 
     if(val) { 
     return val.post == obj 
     } 
    }) 
    } 
} 

एक कस्टम सत्यापनकर्ता यह आपकी समस्या का समाधान होगा बनाने पर विचार कर सकता है?

+0

हाय, आपके समाधान के लिए धन्यवाद! यह काम करता है (छोटे संपादन के साथ) और पहले की स्थिति से बेहतर है क्योंकि अब कम से कम एक छोर पर सत्यापन है। हालांकि, अब भी एक संभावना है कि मैंने पोस्ट में सही टिकट तर्क निर्धारित किया है (क्योंकि वैधकर्ता इसे लागू करता है) लेकिन फिर टिकट पर वापस जाएं और पोस्ट ऑब्जेक्ट को बदलें जो इसे इंगित करता है। मैं बस सोच रहा था कि दोनों सिरों से इसे लागू करने का कोई तरीका है, लेकिन मुझे लगता है कि ऐसा नहीं है? :( –

+0

दूसरे छोर में एक और सत्यापन के बारे में कैसे? यह संभव होना चाहिए? – sbglasius

+0

अब कोशिश कर रहे हैं –

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