التهيئة اليدوية لجداول قاعدة بيانات السبات المطلوبة

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

سؤال

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

يحرر: ماذا عن وقت التشغيل؟هل هناك طريقة في برنامج Java الخاص بي لإعادة تهيئة جداول قاعدة البيانات برمجياً؟ org.hibernate.tool.hbm2ddl.SchemaUpdate ربما يبدو وكأنه الوحش المناسب ولكني لست متأكدًا مما يفعله بالضبط.

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

المحلول

أود استخدام HBM2DDL لإنشاء قاعدة البيانات، ثم استخدام أي نسخ متماثل/نسخ احتياطي موجود في قاعدة البيانات الخاصة بك لحفظ مخطط قاعدة البيانات الخاصة بك، واستخدام تلك البرمجة النصية لإعادة إنشاء قاعدة البيانات الخاصة بك كلما احتجت إلى ذلك؛قم فقط بتشغيل HBM2DDL لإنشاء قاعدة البيانات الخاصة بك عندما يتغير نموذج الكائن الخاص بك.

نصائح أخرى

استخدم مهام النمل السباتي: https://www.hibernate.org/381.html

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

حسنا، شكرا لجميع القرائن!عملت ما يلي:

public class HibernateUtil {
...

  public static SessionFactory createSessionFactory(Properties p)
  {
    try {
        // Create the SessionFactory from hibernate.cfg.xml
        Configuration cfg = new AnnotationConfiguration().configure();
        if (p != null)
            cfg.addProperties(p);
        return cfg.buildSessionFactory();
    } catch (Throwable ex) {
        // Make sure you log the exception, as it might be swallowed
        System.err.println("Initial SessionFactory creation failed." + ex);
        throw new ExceptionInInitializerError(ex);
    }
  }
}

ثم في رمز التطبيق الخاص بي:

private void init() {
    Properties p = new Properties();
    p.setProperty("hibernate.hbm2ddl.auto", "create");
    Session session = HibernateUtil.createSessionFactory(p)
        .getCurrentSession();
    session.beginTransaction();
    session.getTransaction().commit();
    session.getSessionFactory().close();
    System.out.println("should be initialized....");
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top