سؤال

في تطبيق الإسبات الخاص بي، هناك كائن يحركه التوضيحي: Auditevent.. وبعد انها بسيطة جدا وليس لديها علاقات رئيسية أجنبية. أنا أرشفة الإدخالات القديمة في هذا الجدول عن طريق تحريكها إلى طاولة أخرى OldAuditeitvent., ، وهو استنساخ Auditevent. جدول.

الآن نولد DDL للتطبيق بأكمله باستخدام HBM2DDL (على Datamodel المشروح) ونسخ / لصق يدويا جدول AuditEvent وتغيير اسمه لإنشاء OldAuditeitvent..

أريد أتمتة عملية الإنشاء، هل هناك أي طريقة لإخبار HBB2DDL: "مهلا تأخذ هذا الكيان، قم بتغيير اسم الجدول إلى X وتجديده DDL"؟

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

Configuration cfg = ConfigExposingAnnotationSessionFactoryBean.s_instance.getConfiguration();

PersistentClass pClass = cfg.getClassMapping("com.myco.LoginAttempt");
pClass.getTable().setName("ArchiveLoginAttempt");

Dialect dialect = Dialect.getDialect(ConfigExposingAnnotationSessionFactoryBean.s_instance.getHibernateProperties());

// only output create tables, not indexes or FK
for (String s : cfg.generateSchemaCreationScript( dialect )) {
    if (s.contains("create table") && s.contains("Archive")) {
        m_outstream.print(s);
        m_outstream.println(";");
    }
}
هل كانت مفيدة؟

المحلول

انها قابلة للتنفيذ ولكن فوضوي إلى حد ما، وعلى الأرجح، لا يستحق كل هذا العناء في هذه الحالة.

ستحتاج إلى تغيير السبات ديناميكيا إعدادات الكائن قبل بناء الدورة. أنا تستخدم الربيع، يمكن القيام بذلك عن طريق تجاوز postProcessAnnotationConfiguration() طريقة AnnotationSessionFactoryBean; ؛ وإلا سوف تحتاج فقط إلى القيام بذلك باستخدام الخاص بك Configuration كائن قبل الاحتجاج buildSessionFactory() عليه.

يمكنك الوصول إلى تعيينات الفصل / الجدول عبر configuration.getMappings(). وبعد سوف تحتاج بعد ذلك إلى العثور على تعيين الجدول الخاص بك عبر getTable(), ، إنشاء نسخة باسم جديد عبر addTable() وتكرار جميع الأعمدة / المفاتيح عبر جدول API..

يمكنك بعد ذلك إنشاء البرنامج النصي DDL عبر generateSchemaCreationScript() أو generateSchemaUpdateScript() طرق Configuration هدف.

كما قلت، ربما لا يستحق كل هذا العناء في هذه الحالة :-)

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