2012-01-11 9 views
11

मैं पहली बार हाइबरनेट में डेटाबेस स्कीमा बनाना चाहता हूं। और आगे, यदि स्कीमा में कोई संशोधन है, जैसे कि कोई नई तालिका या कुछ कॉलम को हटाने के अलावा, मैं पिछले डेटा को बरकरार रखते हुए मौजूदा स्कीमा को अपडेट करना चाहता हूं।पहली बार हाइबरनेट में डेटाबेस स्कीमा कैसे बनाएं और स्कीमा संशोधन के मामले में इसे और अपडेट करें?

this question पर दिए गए विकल्पों के अनुसार, ऐसा लगता है कि मैं पिछले डेटा को नष्ट करने वाली स्कीमा बना सकता हूं, या मैं स्कीमा अपडेट कर सकता हूं।

क्या कोई मूल्य है जो दोनों कर सकते हैं?

+0

क्या आप इस कार्य को स्वचालित करना चाहते हैं? दूसरे शब्दों में, क्या आप वास्तव में एक बार से अधिक डीबी बना रहे होंगे? – Xorty

+0

नहीं, मैं एक बार डीबी को लालसा नहीं करना चाहता हूं। जैसा कि मैंने पहले कहा था, इसे पहली बार बनाया जाना चाहिए, इसके बाद यदि कोई संशोधन हो तो उसे डीबी स्कीमा चाहिए। –

+0

क्या आपने 'अपडेट' रखने की कोशिश की है, क्या 'अपडेट' दोनों मामलों में काम नहीं कर रहा है? – Jayasagar

उत्तर

1

मैं इकाई परिवर्तनों के आधार पर डीबी स्कीमा को अपडेट करने की अनुशंसा नहीं करता। Flyway या Liquibase के साथ जाने का प्रयास करें। आप स्टैक ओवरफ्लो उदाहरण पर समान प्रश्न पा सकते हैं। Hibernate/JPA DB Schema Generation Best Practices

+0

हाय क्रिस। उत्तर के लिए धन्यवाद। असल में मैं अभी जानना चाहता हूं, क्या स्कीमा मौजूद नहीं है, तो स्कीमा मौजूद नहीं है, तो स्कीमा को अन्यथा मौजूद कर सकता है और कुछ लोगों के साथ एचबीएम फ़ाइल में कुछ संशोधन हैं संपत्ति hibernate.hbm2ddl.auto –

23

असल में मैंने अभी जांच की है <property name="hibernate.hbm2ddl.auto" value="update" /> पहली बार टेबल भी बना रहा है और बाद में यदि टेबल/स्कीमा मौजूद है तो यह अपडेट हो जाता है।

Update संपत्ति एक नया मॉडल शुरू या जोड़ने के दौरान लागू होती है। आप पहले सहेजे गए इकाई उदाहरणों को बनाए रखना चाहते हैं। यह डिफ़ॉल्ट स्कीमा निर्माण शैली है।

यदि आवश्यक हो, तो यह स्कीमा को अपडेट करने का प्रयास करता है। निम्नलिखित अद्यतन समर्थित हैं:

मेरी टिप्पणियों से कुछ देखें

  • एक फ़ील्ड जोड़ें - एक नया स्तंभ तालिका में जोड़ा गया है।
  • फ़ील्ड का नाम बदलें - तालिका में एक नया कॉलम जोड़ा जाता है, जबकि मूल कॉलम रहता है लेकिन अब इसका उपयोग नहीं किया जाता है। नोट: पुराने कॉलम का डेटा नए कॉलम में माइग्रेट नहीं किया गया है।
  • फ़ील्ड निकालें - कॉलम बनी हुई है लेकिन इसका उपयोग नहीं किया जाता है।
  • फ़ील्ड प्रकार बदलें - कॉलम का प्रकार बदलता नहीं है, जिसके परिणामस्वरूप टाइप-मिस्चैच अपवाद हो सकते हैं।
  • एक इकाई बनाएं - एक नई तालिका बनाता है।
  • किसी इकाई का नाम बदलें - मूल तालिका बनी हुई है, जबकि एक नई तालिका बनाता है।
  • किसी इकाई को किसी अन्य फ़ोल्डर में ले जाएं - मूल तालिका बनी हुई है, जबकि एक नई तालिका बनाता है।
  • एक इकाई हटाएं - तालिका बनी हुई है।
+0

के लिए मूल्य वास्तव में उपयोगी हैं !! –

2

आप 'import.sql' का उपयोग कर सकते हैं।

पालन संसाधन में एक import.sql फ़ाइल जोड़ें:

/*create database at first time*/ 
CREATE SCHEMA your-database-name; 

और इस प्रकार 'hibernate.cfg.xml' में एक पंक्ति जोड़ें:

<hibernate-configuration> 
    <session-factory> 
     ... 
     ... 
     <property name="hbm2ddl.import_files">import.sql</property> 
     ... 
     ... 
    </session-factory> 
</hibernate-configuration> 

तो, अगर मौजूद नहीं डेटाबेस, हाइबरनेट नए डीबी बनाता है।

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