Estou com um problema ao usar o hibernate, estou desenvolvendo um sistema e ele esta na sua fase inicial de ideias e desenvolvimento, o que acarreta varias mudanças no banco de dados até chegar ao resultado desejado, porem quando eu insiro algum campo novo na entity ou crio algum relacionamento com outra o entity o hibernate nao reproduz isso no banco de dados, ou seja, ele nao executa um alter table para aplicar as alterações que fiz na entity, ae eu tenho que deletar o banco de dados e rodar o sistema novamente para que o hibernate recrie tudo com as alterações aplicadas, ae após isso tenho que importar todos os dados novamente, e isso tem que ser feito a cada alteração na entity, seja ela minima ou nao. Alguem sabe como resolver isso?
Bom, existe uma propriedade no hibernate que permite que ele crie e altere tabelas, é a hibernate.hbm2ddl.auto.
Ocorre que ela é meio radical.
Esta propriedade possui 3 opções de valor, create, create-drop e update.
A documentação é meio confusa e existe pouca informação sobre a mesma.
O que posso dizer é que os valores create e create-drop sempre apagam as tabelas criadas, quando há criação da session. Já o update apenas cria as tabelas caso elas ainda não existam. Até onde me lembro, mesmo com o nome update, ele realmente não faz o alter table…
T
tiago2109
Cara vc pode mostrar como esta o arquvio de configuraçao com o Banco.
Se vc Estiver usando hibernate puro tem um arquivo chamado hibernate.cfg.xml.
Se vc estiver usando hibernate + JPA o arquivo chama-se persistence.xml
Isso pode ser perigoso.
Tenha certeza que a massa de dados pode ser dropada.
T
tiago2109
drsmachado:
tiago2109:
Tenta mudar a Linha 12 para:
e ve se funciona.
Isso pode ser perigoso.
Tenha certeza que a massa de dados pode ser dropada.
Bom ele disse que o banco ainda esta sendo montado então não há problema algum.
D
drsmachado
Sim, eu entendi. Agora, ele precisa ter total certeza disto. Além de que, precisará, obrigatoriamente, mudar isso para mandar para produção…
R
renatomattos2912
blz, jaja eu testo esta solução, mas mesmo que ela funcione ela não vai atender ao que eu preciso, pq agora tudo bem dropar o banco, mas futuramente nao poderei mais fazer isso, a ideia é só executar um alter table mesmo, sem perda dos dados. eu pensei aqui em algo mais manual mas que nao sei funciona, se algum de vcs ja fez isso e souber se da certo me diga por favor, se eu criar o campo novo na entity e depois ir no banco de dados e criar na mao este campo, o hibernate vai trata-lo normalmente ou nao ira reconhecer?
T
tiago2109
Opa eu Faço isso Todo dia sem problemas, e se vc criar uum relacionamento na Entity, pode ir no banco e criar na mão funciona noralmente tambe !!
R
renatomattos2912
Blz, então nao existe uma forma simples, automatica e gerenciada pelo hibernate para isso, a solução é ir na mão mesmo e ver no q da? uhauha