2010-01-12 13 views
23

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

क्या इस सामग्री के लिए जेपीए में कोई समर्थन है? उपयोगिताएँ? सर्वोत्तम व्यवहार?

चीयर्स!

+1

मैंने हाल ही में जेपीए के बारे में पुस्तक पढ़ी। जेपीए 2.1 2013 को जारी किया गया था, क्या यह अब माइग्रेशन का समर्थन करता है? – AechoLiu

उत्तर

0

यदि आप generateDdl को हाइबरनेट (यदि यह अंतर्निहित कार्यान्वयन है) पर सेट करता है, तो यह आपकी वर्तमान बोली के अनुसार डेटाबेस स्कीमा उत्पन्न करता है। तो बोली बदलने के बाद यह स्वचालित रूप से डेटाबेस उत्पन्न करेगा।

अन्य जेपीए प्रदाताओं के लिए इसके लिए अलग-अलग गुण हो सकते हैं।

+1

यह सही है, लेकिन यह स्कीमा माइग्रेशन के मुद्दे को संबोधित नहीं करता है। – HDave

+0

@HDave - इसके विपरीत। स्कीमा को मौजूदा डेटाबेस मॉडल को प्रतिबिंबित करते हुए नए डेटाबेस में दोहराया जाता है। – Bozho

+4

स्कीमा माइग्रेशन द्वारा, मेरा मानना ​​है कि ओपी का मतलब स्क्रिप्ट है जो डेटा के साथ मौजूदा डेटाबेस ले सकता है और इसे नई इकाइयों/स्कीमा के साथ अद्यतित कर सकता है। अक्सर इसमें स्कीमा परिवर्तनों का सावधानीपूर्वक अध्ययन होता है और कभी-कभी डेटा के अनलोड/पुनः लोडिंग को भी शामिल किया जाता है ताकि एफके को बदला जा सके, पीके को विभाजित किया जा सकता है। हाइबरनेट एक नई स्कीमा बनाने के लिए एक स्क्रिप्ट उत्पन्न कर सकता है। हाइबरनेट एक नई स्कीमा बनाने के लिए पुरानी स्कीमा को संशोधित करने के लिए एक स्क्रिप्ट भी उत्पन्न कर सकता है, लेकिन ऐसा लगता है कि डेटाबेस में कोई डेटा नहीं है - और फिर भी मेरी समझ यह है कि "मुद्दों" के कारण क्षमता का शायद ही कभी उपयोग किया जाता है। – HDave

6

संक्षिप्त उत्तर कोई है।

यदि आप अपने सेम बदलते हैं, तो आपको मौजूदा स्कीमा को हाथ से माइग्रेट करना होगा। तो रेल शैली डेटाबेस माइग्रेशन के लिए आपको कहीं और देखना होगा।

हालांकि आप अपने जावा बीन्स से शुरुआती डीडीएल उत्पन्न कर सकते हैं। उदाहरण नीचे EclipseLink संस्करण 2.0 के साथ स्कीमा निर्माण दिखाता है:

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> 
    <persistence-unit name="JPATestPU" transaction-type="RESOURCE_LOCAL"> 
     <provider> 
      org.eclipse.persistence.jpa.PersistenceProvider 
     </provider> 
     <class>org.randompage.MyEntity</class> 
     <properties> 
      <property name="javax.persistence.jdbc.user" value="johndoe"/> 
      <property name="javax.persistence.jdbc.password" value="secret"/> 
      <property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/> 
      <property name="javax.persistence.jdbc.url" value="jdbc:h2:~/.h2/testdb;FILE_LOCK=NO"/> 
      <property name="eclipselink.ddl-generation" value="drop-and-create-tables"/> 
      <property name="eclipselink.logging.level" value="INFO"/> 
     </properties> 
    </persistence-unit> 
</persistence> 

प्रमुख तत्व यहाँ

<property name="eclipselink.ddl-generation" value="drop-and-create-tables"/> 

है यह मौजूदा टेबल ड्रॉप और अपने जेपीए मानचित्रण से एक बार नए उत्पन्न करने के लिए EclipseLink बताता है। यह प्रक्रिया अत्यधिक विक्रेता विशिष्ट है इसलिए अन्य जेपीए विक्रेताओं (हाइबरनेट, ओपनजेपीए ...) के लिए आपको अपने विशिष्ट दस्तावेज से परामर्श करना होगा।

11

मैं डेटाबेस स्कीमा को अद्यतन करने के लिए जेपीए प्रदाताओं पर भरोसा नहीं रखूंगा। अच्छे दृष्टिकोणों में से एक के लिए Liquibase देखें।

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