2015-10-13 1 views
13

वर्तमान में हम एक डाटाबेस के रूप में mysql का उपयोग कर रहे हैं और हमGenerationType.AUTO बनाम GenerationType.IDENTITY

@Generated Value(strategy = GenerationType.IDENTITY)

का उपयोग

यह निश्चित स्थिति हम उस समय यह है पर ओरेकल के लिए हमारे डेटाबेस माइग्रेट करने की आवश्यकता पर पूरी तरह से काम कर रहा है ठीक से काम नहीं कर रहा है। अगर कोई जानता है कि इसके पीछे वास्तविक अंतर क्या है और यह कैसे काम कर रहा है?

+0

क्या ORM प्रदाता आप उपयोग कर रहे हैं? –

+0

हाइबरनेट और जेपीए –

उत्तर

11

ओरेकल के साथ यह "ठीक से काम कैसे कर सकता है" (आप मूल जानकारी को परिभाषित नहीं करते हैं) मुझे आपके प्रश्न पर AUTO की प्रासंगिकता दिखाई नहीं दे रही है - जो कि केवल कार्यान्वयन को चुनने देती है कि वह क्या उपयोग करना चाहती है।

"IDENTITY" (जेपीए जावाडॉक्स और स्पेक के अनुसार - आपको क्या संदर्भित किया जाना चाहिए) का अर्थ है ऑटोइनक्रिएटमेंट। ओरेकल में ऐसी कोई अवधारणा नहीं है, फिर भी MySQL, SQLServer और कुछ अन्य में है। जब मैं ऐसी चीज की कोशिश करता हूं तो मैं किसी भी सभ्य जेपीए कार्यान्वयन की त्रुटि को ध्वजांकित करने की अपेक्षा करता हूं।

ओरेकल की अनुमति होगी "SEQUENCE", या "TABLE" रणनीतियों तथापि प्रयोग की जाने वाली

+1

हां, जैसा कि आपने कहा था कि ऑरैकल में कोई ऑटो वृद्धि विकल्प नहीं है। लेकिन अगर मैं जेनरेशन टाइप का उपयोग करता हूं। ऑटो मॉडल ओरेकल डेटाबेस के लिए काम कर रहा है क्योंकि अगर मैं ऑटो देता हूं तो जेपीए स्वचालित रूप से जेनरेट किए गए प्रकार को डेटाबेस के अनुसार ले जाता है। अपना स्पष्टीकरण के लिए धन्यवाद। –

3

Java Persistence/Identity and Sequencing का हवाला देते हुए:

पहचान अनुक्रमण डेटाबेस में विशेष पहचान कॉलम का उपयोग करता है डेटाबेस अनुमति देने के लिए जब उसकी पंक्ति डाली जाती है तो ऑब्जेक्ट को ऑब्जेक्ट स्वचालित रूप से असाइन करने के लिए। MySQL, DB2, SQL सर्वर, Sybase और Postgres जैसे कई डेटाबेस में पहचान कॉलम समर्थित हैं। ओरेकल पहचान कॉलम का समर्थन नहीं करता है लेकिन अनुक्रम वस्तुओं और ट्रिगर्स का उपयोग करके उन्हें अनुकरण किया जा सकता है।

तो मैं अनुक्रम का उपयोग करने के लिए बजाय

अनुक्रम वस्तुओं विशेष डेटाबेस ऑब्जेक्ट का उपयोग आईडी उत्पन्न करने के लिए पसंद करते हैं। अनुक्रम वस्तुएं केवल कुछ डेटाबेस, जैसे ओरेकल, डीबी 2, और पोस्टग्रेज़ में समर्थित हैं। आमतौर पर, एक SEQUENCE ऑब्जेक्ट का नाम, एक वृद्धि, और अन्य डेटाबेस ऑब्जेक्ट सेटिंग्स होती है। प्रत्येक बार .NEXTVAL का चयन किया जाता है, अनुक्रम वृद्धि द्वारा क्रमबद्ध किया जाता है।

उदाहरण:

@Entity 
public class Employee { 
    @Id 
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="EMP_SEQ") 
    @SequenceGenerator(name="EMP_SEQ", sequenceName="EMP_SEQ", allocationSize=100) 
    private long id; 
    ... 
} 
संबंधित मुद्दे