ручная инициализация необходимых таблиц базы данных Hibernate - PullRequest
2 голосов
/ 19 мая 2009

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

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

Ответы [ 4 ]

2 голосов
/ 19 мая 2009

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

1 голос
/ 19 мая 2009

Используйте задачи муравейника hibernate: https://www.hibernate.org/381.html

0 голосов
/ 19 мая 2009

ок, спасибо за все подсказки! сработало следующее:

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....");
}
0 голосов
/ 19 мая 2009

С этим установленным свойством вы можете создавать и обновлять сценарии для базы данных и выполнять их. Это отличный инструмент для создания прототипов, но через некоторое время я бы предложил перейти к другой стратегии обновления БД.

...