inicialização manual de tabelas de banco de dados Hibernate
-
22-08-2019 - |
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.
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....");
}