手动初始化所​​需的Hibernate数据库表

时间:2009-05-18 22:02:04

标签: hibernate initialization hbm2ddl

我开始使用Hibernate,到目前为止它并不太难。但我对hbm2ddl.auto属性感到困惑。有没有办法手动执行这样做来初始化数据库表?我只想在更改数据库后执行此操作,而不是每次运行程序时都这样做。

编辑:在运行时怎么样?我的Java程序中有一种方法可以以编程方式重新初始化数据库表吗? org.hibernate.tool.hbm2ddl.SchemaUpdate看起来像是正确的野兽,但我不确定它到底是做什么的。

4 个答案:

答案 0 :(得分:2)

我将使用HBM2DDL生成数据库,然后使用数据库中存在的任何复制/备份来保存数据库模式,并使用该脚本在需要时重新创建数据库;只有在对象模型发生变化时才运行HBM2DDL来生成数据库。

答案 1 :(得分:1)

使用hibernate ant任务:https://www.hibernate.org/381.html

答案 2 :(得分:0)

设置此属性后,您可以为数据库生成创建/更新脚本并执行它们。这是一个很好的原型设计工具,但过了一段时间我会建议转向另一个数据库更新策略。

答案 3 :(得分: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....");
}