Pregunta

Estoy empezando en hibernación y hasta ahora no es demasiado duro. Pero estoy confundido acerca de la propiedad hbm2ddl.auto. ¿Hay una manera de ejecutar de forma manual lo que esto hace a inicializar las tablas de bases de datos? Yo sólo quiero hacer esto después de hacer mis cambios de base de datos, no cada vez que funciono mi programa.

editar ¿qué pasa en tiempo de ejecución? ¿hay alguna manera en mi programa Java mediante programación volver a inicializar las tablas de bases de datos? org.hibernate.tool.hbm2ddl.SchemaUpdate se ve tal vez como la bestia derecho, pero no estoy seguro de lo que hace exactamente.

¿Fue útil?

Solución

Me gustaría utilizar el hbm2ddl para generar la base de datos, a continuación, utilizar cualquiera que sea la replicación / existe copia de seguridad en su base de datos para guardar el esquema de base de datos, y el uso que de secuencias de comandos para volver a crear la base de datos siempre que lo necesite; Sólo ejecutar el hbm2ddl para generar la base de datos cuando los cambios en el modelo de objetos.

Otros consejos

Utilice las tareas de hormigas de hibernación: https://www.hibernate.org/381.html

Con este conjunto de propiedades, puede generar crear scripts / actualización de la base de datos y ejecutarlos. Esta es una gran herramienta para la creación de prototipos, pero después de algún tiempo que sugeriría pasar a otra estrategia de actualización del DB.

ok, gracias por todas las pistas! los siguientes trabajó:

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

A continuación, en mi código de la aplicación:

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....");
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top