2010-04-06 11 views
6

क्या ऐसी तालिका बनाना संभव है जिसमें 'आईडी' न हो?क्या Grails डोमेन के लिए कोई 'आईडी' नहीं है?

class SnbrActVector { 

    int nid 
    String term 
    double weight 

    static mapping = { 
     version false 
     id generator: 'identity' 
    } 

    static constraints = { 
    } 
} 

जब मैं इस एसक्यूएल बयान चलाने के लिए, यह विफल रहता है: उदाहरण के लिए, यह मेरा डोमेन है

insert into snbr_act_vector values (5, 'term', 0.5) 

मैं मेज और 'आईडी' पहले से ही AutoIncrement पर सेट है की जाँच की। मैं सोच रहा हूं कि 'आईडी' को हटाने का दूसरा विकल्प है। या इसके लिए कोई और कामकाज है? कृपया मान लें कि यह givent SQL कथन को बदलने का विकल्प नहीं है।

उत्तर

1

"आईडी जनरेटर: 'पहचान' के बजाय" आईडी (जेनरेटर: 'असाइन किया गया') "का उपयोग करने का प्रयास करें और देखें कि क्या यह" आईडी "डेटाबेस कॉलम से ऑटोइनक्रिकमेंट प्रॉपर्टी को हटा देता है या नहीं।

+0

उत्तर के लिए धन्यवाद। अभी आपके सुझाव का परीक्षण किया और दुर्भाग्यवश, 'आईडी' अभी भी वहां है। – firnnauriel

+0

बीटीडब्ल्यू, इसने 'आईडी' की ऑटोइनक्रिकमेंट प्रॉपर्टी हटा दी है। लेकिन मुझे जो चाहिए वह 'आईडी' कॉलम को पूरी तरह से निकालना है और केवल 3 कॉलम हैं: निड, टर्म, वेट – firnnauriel

4

आपको शायद यह निर्दिष्ट करने की आवश्यकता है कि निड आपका आईडी कॉलम है।

static mapping = { 
    version false 
    id generator: 'identity', column: 'nid' 
} 
+0

ऐसा लगता है कि यह एक और तरीका हो सकता है। मुझे 'जनरेटर' संपत्ति के साथ खेलना पड़ सकता है। कृपया ध्यान दें कि मुख्य लक्ष्य यह कथन काम करने के लिए किसी भी संशोधन को बनाना है: snbr_act_vector मानों (5, 'टर्म', 0.5) – firnnauriel

+0

में डालें यदि यह वास्तव में आपका लक्ष्य है, तो आपको कुछ अतिरिक्त सेटअप करने की आवश्यकता हो सकती है आपके डीबी में शायद तालिका परिभाषा में कथन का अनुवाद करने के लिए एक ट्रिगर? अन्यथा, मुझे लगता है कि ल्यूक का जवाब सबसे अधिक है जो आप Grails/GORM से कर सकते हैं। –

6

छात्रावास को काम करने के लिए एक आईडी फ़ील्ड की आवश्यकता होती है। आप नीचे की तरह एक क्षणिक चर का उपयोग कर एक निर्दिष्ट आईडी नकली कर सकते हैं। गेटर्स और सेटर्स आईडी फ़ील्ड में निड फ़ील्ड को मैप करते हैं।

जब एक डोमेन वस्तु बचत इस प्रक्रिया में क्या करना है का उपयोग करते हुए: क्योंकि grails सोचता है कि एक गैर-शून्य आईडी एक लगातार उदाहरण है

snbrActVectgor.save(insert:true) 

class SnbrActVector { 
    Integer id 
    // nid is the actual primary key 
    static transients = ['nid'] 
    void setNid(Integer nid) { 
     id = nid 
    } 
    Integer getNid() { 
     return nid 
    } 

    static mapping = { 
     version false 
     id generator:'assigned', column:'nid', type:'integer' 
    } 
} 
2

कोई "आईडी" रखने का कोई तरीका नहीं है। आप क्या कर सकते हैं असाइन आईडी जनरेटर का उपयोग कर "आईडी" फ़ील्ड का नाम बदल सकते हैं।

0

ओरेकल में हाँ आप आईडी कॉलम के लिए ROWID का उपयोग कर सकते हैं।

class Document { 
    String id 

    static mapping = { 
     table "DOCUMENTS" 
     version false 
     id column: 'ROWID' 
    } 

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