Frage

Ich bin immer in dem Ruhezustand gestartet und es ist bisher nicht zu hart. Aber ich bin verwirrt über die hbm2ddl.auto Eigenschaft. Gibt es eine Möglichkeit manuell auszuführen, was auch immer dies tut die Datenbanktabellen zu initialisieren? Ich möchte nur, dies zu tun, nachdem ich meine Datenbank Änderungen vornehmen, nicht jedes Mal, wenn ich mein Programm.

Bearbeiten , was etwa zur Laufzeit? ist es eine Möglichkeit, programmatisch die Datenbanktabellen neu zu initialisieren in meinem Java-Programm? org.hibernate.tool.hbm2ddl.SchemaUpdate sieht vielleicht wie das richtige Tier, aber ich bin nicht sicher, was es tut genau das.

War es hilfreich?

Lösung

würde ich die HBM2DDL verwenden, um die Datenbank zu erzeugen, verwenden Sie dann unabhängig von der Replikation / Backup auf Ihrer Datenbank vorhanden ist Ihr Datenbankschema zu speichern, und verwenden Sie diese Scripting-Datenbank neu zu erstellen, wann immer Sie benötigen; nur die HBM2DDL führen Sie Ihre Datenbank, wenn Ihr Objektmodell Änderungen zu erzeugen.

Andere Tipps

Mit den Hibernate-Ameise Aufgaben: https://www.hibernate.org/381.html

Mit dieser Eigenschaft festgelegt, können Sie generieren erstellen / aktualisieren Skripte für Datenbank und ausführen. Dies ist ein großes Werkzeug für das Prototyping, aber nach einiger Zeit würde ich in einer anderen DB-Update-Strategie empfehlen, zu bewegen.

ok, danke für die Hinweise! Nachfolgend gearbeitet:

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);
    }
  }
}

dann in meinem Anwendungscode:

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....");
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top