2009-05-18 5 views
2

Ich beginne in Hibernate und bis jetzt ist es nicht zu schwer. Aber ich bin verwirrt über die Eigenschaft hbm2ddl.auto. Gibt es eine Möglichkeit, manuell auszuführen, was auch immer dies tut, um die Datenbanktabellen zu initialisieren? Ich möchte dies nur tun, nachdem ich meine Datenbank geändert habe, nicht jedes Mal, wenn ich mein Programm ausführe.manuelle Initialisierung der erforderlichen Hibernate-Datenbanktabellen

bearbeiten: was ist zur Laufzeit? Gibt es eine Möglichkeit in meinem Java-Programm, die Datenbanktabellen programmatisch neu zu initialisieren? org.hibernate.tool.hbm2ddl.SchemaUpdate sieht vielleicht wie das richtige Biest aus, aber ich bin mir nicht sicher, was es genau macht.

Antwort

2

Ich würde die HBM2DDL verwenden, um die Datenbank zu erstellen, dann verwenden, was die Replikation/Backup auf Ihrer Datenbank vorhanden ist Ihr Datenbankschema zu speichern, und verwenden Sie diese Scripting-Datenbank neu zu erstellen, wann immer du brauchst; Führen Sie das HBM2DDL nur aus, um Ihre Datenbank zu generieren, wenn sich Ihr Objektmodell ändert.

0

Mit dieser Eigenschaft können Sie create/update-Skripte für die Datenbank erstellen und ausführen. Dies ist ein großartiges Werkzeug für das Prototyping, aber nach einiger Zeit würde ich vorschlagen, zu einer anderen DB-Aktualisierungsstrategie überzugehen.

0

ok, danke für alle Hinweise! Nachfolgend arbeitet:

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...."); 
} 
Verwandte Themen