2

私は Hibernate を使い始めていますが、今のところそれほど難しくありません。しかし、hbm2ddl.auto プロパティについて混乱しています。データベーステーブルを初期化するためにこれが行うことを手動で実行する方法はありますか? プログラムを実行するたびにではなく、データベースに変更を加えた後にのみこれを行いたいです。

編集:実行時はどうですか?データベース テーブルをプログラムで再初期化する Java プログラムの方法はありますか? org.hibernate.tool.hbm2ddl.SchemaUpdateはおそらく正しい獣のように見えますが、それが正確に何をするのかわかりません。

4

4 に答える 4

2

HBM2DDL を使用してデータベースを生成し、データベースに存在するレプリケーション/バックアップを使用してデータベース スキーマを保存し、必要なときにそのスクリプトを使用してデータベースを再作成します。オブジェクト モデルが変更された場合にのみ、HBM2DDL を実行してデータベースを生成します。

于 2009-05-18T22:05:31.193 に答える
1

わかりました、すべての手がかりをありがとう!以下が機能しました:

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....");
}
于 2009-05-19T16:12:49.357 に答える
1

hibernate ant タスクを使用します: https://www.hibernate.org/381.html

于 2009-05-18T22:04:19.887 に答える
0

このプロパティ セットを使用すると、データベースの作成/更新スクリプトを生成して実行できます。これはプロトタイピング用の優れたツールですが、しばらくしてから、別の DB 更新戦略に移行することをお勧めします。

于 2009-05-18T22:07:30.427 に答える