هل هناك طريقة للحصول على مهمة HBM2DDL ANT الخاصة بـ Hibernate لاستبعاد جداول محددة؟

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

سؤال

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

<target name="schema-gen" depends="hibernate-gen">
    <taskdef name="schemaexport" classname="org.hibernate.tool.hbm2ddl.SchemaExportTask" classpathref="project.classpath" />

    <schemaexport properties="resources/hibernate.properties" text="false" quiet="false" delimiter=";" output="schema.sql">
        <fileset dir="${build.doclets}">
            <include name="**/*.hbm.xml" />
            <exclude name="**/inert/*.hbm.xml" />
        </fileset>
    </schemaexport>
</target>

تم إنشاء ملفات .hbm.xml باستخدام xDoclet. أنا أراجر إلى استخدام التعليقات التوضيحية للسبات للرسم الخرائط ، لذلك أنا أنتقل إلى Hibernatetools لتوليد المخطط:

<target name="annotations-export" depends="hibernate-gen">
    <hibernatetool destdir="${basedir}">
        <annotationconfiguration configurationfile="${basedir}/resources/hibernate.cfg.xml" propertyfile="${basedir}/resources/hibernate.properties" />
        <classpath>
            <path refid="project.classpath" />
        </classpath>
        <hbm2ddl drop="true" create="true" export="true" outputfilename="schema.sql" delimiter=";" format="true" />
    </hibernatetool>
</target>

أود أن أكون قادرًا على إخبار HBM2DDL بترك الفصول الدراسية في حزمة "الخامل" ، تمامًا مثلما اعتدت على مخطط Export. أي شخص يعرف ما إذا كانت هناك طريقة للقيام بذلك؟

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

المحلول 2

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

نصائح أخرى

هذا يجب أن يعمل:

<target name="annotations-export" depends="hibernate-gen">
    <hibernatetool destdir="${basedir}">
        <annotationconfiguration configurationfile="${basedir}/resources/hibernate.cfg.xml" propertyfile="${basedir}/resources/hibernate.properties">
            <fileset dir="${build.doclets}">
                <include name="**/*.class" />
                <exclude name="**/inert/*.class" />
            </fileset>
        </annotationconfiguration>
        <classpath>
            <path refid="project.classpath" />
        </classpath>
        <hbm2ddl drop="true" create="true" export="true" outputfilename="schema.sql" delimiter=";" format="true" />
    </hibernatetool>
</target>

هل جربت تحديث ميزة على HBMDDL بطاقة شعار؟

<hbm2ddl update="true" ...

نرى هنا للحصول على التفاصيل

التي يجب أن تعمل

إذا كان لديك هذا الموقف ولم ترغب في تحديث السبات بيانات في الجداول أيضًا ، يمكنك استبدال:

<class name="FooClass" table="FOO_TABLE"></class>

مع

<class name="Foo" subselect="select * from FOO_TABLE">
  <synchronize table="FOO_TABLE">
</class>

بعد ذلك ، ستتجاهل أداة تصدير المخطط ، ولكن أي كتابة. على الأقل ، هذا ما تقترحه الوثائق.

Subselect (اختياري): يخطط كيان غير قابل للتغيير وقراءة فقط لقاعدة بيانات فرعية.

اكتشفت هذا من خلال النظر إلى Table.isPhysicalTable وظيفة. يمكنك أيضًا البحث في استخدام AbstractUnionTables ، والتي هي الاستثناء الآخر.

أنا أريد أشياء غير قابلة للتغيير.

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

لسوء الحظ ، سوف يتناثر على جميع استفساراتك مع هذا subselect ، والتي قاعدة البيانات ينبغي كن قادرًا على تحسينه بعيدًا ، لكن الناس لديهم كميات متفاوتة من الثقة في تحسين قاعدة البيانات لسبب وجيه.

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