ओरेकल पर यूयूआईडी का उपयोग करने के लिए मैं Grails id कॉलम को कैसे कॉन्फ़िगर कर सकता हूं?

मैं अपने सभी Grails डोमेन पर आईडी फ़ील्ड के लिए Long के बजाय 128-बिट UUID का उपयोग करना चाहता हूं। मुझे हर डोमेन पर सभी मैपिंग जानकारी निर्दिष्ट करने की आवश्यकता नहीं है। क्या यह सामान्य/वैश्विक तरीके से हासिल करने का एक आसान तरीका है? मैं Grails 2.3.x, Hibernate 3.6.10.2 प्लगइन, डेटाबेस माइग्रेशन प्लगइन 1.3.8, और ओरेकल 11 जी (11.2.0.2.0) का उपयोग कर रहा हूँ।

इस से संबंधित कई प्रश्न हैं, लेकिन कोई भी वास्तव में काम करने वाले पूर्ण, सटीक और अद्यतित उत्तरों प्रदान नहीं करता है।

संबंधित सवाल

0

2 उत्तर

यूयूआईडी और रॉ का उपयोग (16)

यदि आप अपने Grails डोमेन में UUID और अपने डेटाबेस में RAW (16) का उपयोग करना चाहते हैं, तो आपको निम्न को जोड़ना होगा।

  1. For every domain, specify the id field. Here's an example using ExampleDomain.groovy

    class ExampleDomain {
        UUID id
    }
    
  2. Add the following mapping to Config.groovy

    grails.gorm.default.mapping = {
        id(generator: "uuid2", type: "uuid-binary", length: 16)
    }
    

    For details on the three values I've selected, please see these links.

  3. Add a custom dialect to your data source entry in Datasource.groovy. If you are using Hibernate 4.0.0.CR5 or higher, you can skip this step.

    dataSource {
       //Other configuration values removed for brevity
        dialect = com.example.hibernate.dialect.BinaryAwareOracle10gDialect
    }
    
  4. Implement the custom dialect you referenced in step #3. Here is BinaryAwareOracle10gDialect implemented in Java. If you are using Hibernate 4.0.0.CR5 or higher, you can skip this step.

    package com.example.hibernate.dialect;
    
    import java.sql.Types;
    import org.hibernate.dialect.Oracle10gDialect;
    
    public class BinaryAwareOracle10gDialect extends Oracle10gDialect {
        @Override
        protected void registerLargeObjectTypeMappings() {
            super.registerLargeObjectTypeMappings();
            registerColumnType(Types.BINARY, 2000, "raw($l)");
            registerColumnType(Types.BINARY, "long raw");
        }
    }
    

    For more information about this change, please see the related Hibernate defect https://hibernate.atlassian.net/browse/HHH-6188.

यूयूआईडी और वर्चर 2 (36) का उपयोग करना

यदि आप अपने Grails डोमेन में UUID और अपने डेटाबेस में VARCHAR2 (36) का उपयोग करना चाहते हैं, तो आपको निम्न को जोड़ना होगा।

  1. For every domain, specify the id field. Here's an example using ExampleDomain.groovy.

    class ExampleDomain {
        UUID id
    }
    
  2. Add the following mapping to Config.groovy

    grails.gorm.default.mapping = {
        id(generator: "uuid2", type: "uuid-char", length: 36)
    }
    

    For details on the three values, please see the links in step #2 from the previous section.

0
जोड़ा
मुझे हाइबरनेट दस्तावेज के माध्यम से खोदना पड़ा। मैपिंग जानकारी में से कुछ यहां उपलब्ध है: दस्तावेज़ .jboss.org/हाइबरनेट/कोर/3.6/संदर्भ/en-US/html/& hellip; । इसके अलावा, अगर आपको मेरा मूल उत्तर उपयोगी लगता है, तो कृपया इसे ऊपर उठाएं!
जोड़ा लेखक jstricker, स्रोत
जानकारी के लिए धन्यवाद। बहुत अच्छा काम करता है। लेकिन आप "प्रकार" और "लंबाई" मानचित्र प्रविष्टियों का उपयोग कैसे जानते थे? उदाहरण के लिए, मैं कैसे पता लगा सकता हूं कि अन्य विकल्प क्या उपलब्ध हैं? मुझे नहीं पता कि उन मूल्यों का उपभोग कौन कर रहा है और मैं उन सभी को आईडी के लिए मैपिंग मैपिंग में दस्तावेज नहीं देखता हूं: grails.org/doc/latest/ref/Database%20Mapping/id.html
जोड़ा लेखक Vahid Pazirandeh, स्रोत

मुझे लगता है कि एक आसान तरीका है:

String id = UUID.randomUUID().toString()

static mapping = {
    id generator:'assigned'
}
0
जोड़ा