Pergunta

Eu estou começando no Hibernate e até agora não é muito difícil. Mas eu estou confuso sobre a propriedade hbm2ddl.auto. Existe uma maneira de executar manualmente o que quer que isto faz para inicializar as tabelas de banco de dados? Eu só quero fazer isso depois de eu fazer minhas alterações de banco de dados, e não cada vez que eu executar o meu programa.

Editar: que sobre em tempo de execução? há uma maneira em meu programa Java para programaticamente re-inicializar as tabelas de banco de dados? org.hibernate.tool.hbm2ddl.SchemaUpdate aparência talvez como o animal certo, mas eu não sei o que ele faz exatamente.

Foi útil?

Solução

Eu usaria o hbm2ddl para gerar o banco de dados, então use qualquer replicação existe / backup do seu banco de dados para salvar o seu esquema de banco de dados, e usar esse script para recriar seu banco de dados sempre que precisar; só correr o hbm2ddl para gerar seu banco de dados quando o seu objeto muda modelo.

Outras dicas

Use as tarefas de formiga hibernação: https://www.hibernate.org/381.html

Com esse conjunto de propriedades, você pode gerar criar / scripts de atualização para banco de dados e executá-los. Esta é uma grande ferramenta para prototipagem, mas depois de algum tempo eu sugiro mudar para outra estratégia de atualização DB.

ok, obrigado por todas as pistas! o seguinte funcionou:

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

, em seguida, no meu código do aplicativo:

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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top