Domanda

Sono agli inizi a Hibernate e finora non è troppo difficile. Ma io sono confuso circa la proprietà hbm2ddl.auto. C'è un modo per eseguire manualmente tutto ciò che fa per inizializzare le tabelle del database? Ho solo voglia di fare questo dopo che io faccio le mie modifiche al database, non ogni volta che eseguo il mio programma.

modifica per quanto riguarda in fase di esecuzione? c'è un modo nel mio programma Java per programmazione ri-inizializzare le tabelle del database? org.hibernate.tool.hbm2ddl.SchemaUpdate appare forse come la bestia a destra, ma io non sono sicuro di quello che fa esattamente.

È stato utile?

Soluzione

Vorrei utilizzare il HBM2DDL per generare il database, quindi utilizzare qualsiasi replica / esiste backup del database per salvare lo schema del database, e l'uso che di script per ricreare il database ogni volta che è necessario; eseguire solo il HBM2DDL per generare il database quando l'oggetto cambia modello.

Altri suggerimenti

Utilizzare i compiti formica Hibernate: https://www.hibernate.org/381.html

Con questo insieme di proprietà, è possibile generare creare script / aggiornamento per il database ed eseguirli. Questo è un grande strumento per la prototipazione, ma dopo qualche tempo vorrei suggerire trasferirsi in un'altra strategia di aggiornamento DB.

ok, grazie per tutti gli indizi! quanto segue lavorato:

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

poi nel mio codice dell'applicazione:

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....");
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top