أفضل نهج لإنشاء Java/Maven/JPA/Hibernate مع دعم بائع قاعدة بيانات متعددة؟

StackOverflow https://stackoverflow.com/questions/2832001

سؤال

لديّ تطبيق مؤسسة يستخدم قاعدة بيانات واحدة ، لكن التطبيق يحتاج إلى دعم MySQL, وحي, ، و خادم قاعدة البيانات كخيارات التثبيت.

لمحاولة تبقى محمولة نحن نستخدم التعليقات التوضيحية JPA مع بيات شتوى كما التنفيذ. لدينا أيضًا مثيل اختبار السرير لكل قاعدة بيانات تعمل للتطوير.

التطبيق يبني بشكل جيد في مافن ولعبت مع Hibernate3-Maven-Plugin ويمكن أن تلقائيا تلقائيا DDL لهجة قاعدة بيانات معينة.

ما هي أفضل طريقة للتعامل مع هذا حتى يتمكن المطورين الفرديون من الاختبار بسهولة مقابل جميع قواعد البيانات الثلاثة ويمكن لخادم CI القائم على Hudson بناء الأشياء بشكل صحيح.

اكثر تحديدا:

  1. اعتقدت HBM2DDL الهدف في من شأنه أن يولد ملف مخطط ، ولكن يبدو أنه يتصل بقاعدة بيانات حية ومحاولات لإنشاء المخطط. هل هناك طريقة للحصول على هذا فقط قم بإنشاء ملف المخطط لكل لهجة قاعدة بيانات بدون الاتصال بقاعدة بيانات؟

  2. إذا Hibernate3-Maven-Plugin يصر على إنشاء مخطط قاعدة البيانات فعليًا ، هل هناك طريقة لإسقاط قاعدة البيانات وإعادة إنشائها قبل إنشاء المخطط؟

  3. أفكر في أن كل مطور (وجهاز بناء Hudson) يجب أن يكون له قاعدة بيانات منفصلة خاصة بها على كل خادم قاعدة بيانات. هل هذا نموذجي؟

  4. هل سيتعين على المطورين تشغيل Maven ثلاث مرات ... مرة واحدة لكل بائع قاعدة بيانات؟ إذا كان الأمر كذلك ، كيف يمكنني دمج النتائج على آلة الإنشاء؟

  5. هناك HBM2DOC الهدف داخل Hibernate3-Maven-Plugin. يبدو من المفرط تشغيل هذا ثلاث مرات ... يجب أن أعتقد أنه سيكون متطابقًا تقريبًا لكل قاعدة بيانات.

هل كانت مفيدة؟

المحلول

1) هل هناك طريقة لجعل هذا فقط إنشاء ملف المخطط لكل لهجة قاعدة البيانات دون الاتصال بقاعدة بيانات؟

جلس export ل false. شيء من هذا القبيل:

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>hibernate3-maven-plugin</artifactId>
  <version>2.2</version>
  <configuration>
    <components>
      <component>
        <name>hbm2ddl</name>
        <implementation>annotationconfiguration</implementation>
      </component>
    </components>
    <componentProperties>
      <export>false</export><!-- do not export to the database -->
      <drop>true</drop>
      <configurationfile>src/main/resources/hibernate.cfg.xml</configurationfile>
      <outputfilename>my_schema.ddl</outputfilename>
    </componentProperties>
  </configuration>
</plugin>

2) إذا أصرت Hibernate3-Maven-Plug على إنشاء مخطط قاعدة البيانات فعليًا ، فهل هناك طريقة لإسقاط قاعدة البيانات وإعادة إنشائها قبل إنشاء المخطط؟

أنظر فوق. ولكن فقط في حالة هذه المجموعة update ل true:

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>hibernate3-maven-plugin</artifactId>
  <version>2.2</version>
  <configuration>
    <components>
      <component>
        <name>hbm2ddl</name>
        <implementation>annotationconfiguration</implementation>
      </component>
    </components>
    <componentProperties>
      <export>true</export>
      <update>true</update><!-- update the schema -->
      <drop>true</drop>
      <configurationfile>src/main/resources/hibernate.cfg.xml</configurationfile>
      <outputfilename>my_schema.ddl</outputfilename>
    </componentProperties>
  </configuration>
  <dependencies>
    <dependency>
      <groupId>org.apache.derby</groupId>
      <artifactId>derbyclient</artifactId>
      <version>10.5.3.0_1</version>
    </dependency>
  </dependencies>
</plugin>

3) أفكر في أن كل مطور (وجهاز بناء Hudson) يجب أن يكون له قاعدة بيانات منفصلة خاصة بها على كل خادم قاعدة بيانات. هل هذا نموذجي؟

نعم ، وأنا أعتبر هذا أفضل الممارسات (انظر استخدم مثيل قاعدة بيانات واحد لكل مطور).

4) هل يتعين على المطورين تشغيل Maven ثلاث مرات ... مرة واحدة لكل بائع قاعدة بيانات؟ إذا كان الأمر كذلك ، كيف يمكنني دمج النتائج على آلة الإنشاء؟

نعم ، من المحتمل جدًا أن أستخدم ملفات تعريف لكل قاعدة بيانات. على آلة البناء ، أود بناء مشروع مصفوفة.

5) هناك هدف HBM2DOC ضمن Hibernate3-Maven-Plugin. يبدو من المفرط تشغيل هذا ثلاث مرات ... يجب أن أعتقد أنه سيكون متطابقًا تقريبًا لكل قاعدة بيانات.

أنا لست معتادًا على هذه الأداة ، لكنني أعتقد أنه قد يكون هناك بعض التباين القليل في الإخراج (على سبيل المثال مع توليد المفاتيح الأساسية). أود أن أقوم بإنشاء وثائق المخطط لكل قاعدة بيانات ولكن في وقت الإصدار فقط (بالتأكيد ليست هناك حاجة لتشغيل ذلك في كل بناء).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top