ручная инициализация необходимых таблиц базы данных в режиме гибернации

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

Вопрос

Я начинаю работать в режиме Гибернации, и пока это не слишком сложно.Но меня смущает свойство hbm2ddl.auto.Есть ли способ вручную выполнить все, что это делает для инициализации таблиц базы данных?Я хочу делать это только после внесения изменений в свою базу данных, а не каждый раз, когда я запускаю свою программу.

Редактировать: а как насчет во время выполнения?есть ли в моей программе Java способ программно повторно инициализировать таблицы базы данных? org.hibernate.tool.hbm2ddl.Настройка схемы возможно, выглядит как правильный зверь, но я не уверен, что именно он делает.

Это было полезно?

Решение

Я бы использовал HBM2DDL для создания базы данных, затем использовал бы любую репликацию / резервную копию, существующую в вашей базе данных, чтобы сохранить схему вашей базы данных, и использовал бы этот сценарий для воссоздания вашей базы данных всякий раз, когда вам нужно;запускайте HBM2DDL только для создания вашей базы данных при изменении вашей объектной модели.

Другие советы

Используйте задачи hibernate ant: 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