manuelle Initialisierung der erforderlichen Hibernate Datenbanktabellen
-
22-08-2019 - |
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.
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....");
}