2009-05-18 2 views
2

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

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

ответ

2

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

0

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

0

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

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...."); 
} 
Смежные вопросы