Atualizar Tabela ao alterar entity do hibernate

Bom dia,

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?

seu hibernate.cfg.xml tem essa linha ?

<property name="hibernate.hbm2ddl.auto">update</property>

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…

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

galera, segue meu arquivo de configuração:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
		"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
		"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
	<session-factory>
		<property name="hibernate.connection.driver_class">org.gjt.mm.mysql.Driver</property>
		<property name="hibernate.connection.password">****</property>
		<property name="hibernate.connection.url">jdbc:mysql://localhost/banco</property>
		<property name="hibernate.connection.username">teste</property>
		<property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
		<property name="hibernate.hbm2ddl.auto">update</property>
		<property name="show_sql">true</property>
		<property name="format_sql">true</property>

		<!-- Entitys -->
		<mapping class="br.com.comparaescola.model.entity.Cidade" />
		<mapping class="br.com.comparaescola.model.entity.Curso" />
		<mapping class="br.com.comparaescola.model.entity.Estado" />
		
	</session-factory>
</hibernate-configuration>

Tenta mudar a Linha 12 para:

e ve se funciona.

[quote=tiago2109]Tenta mudar a Linha 12 para:

e ve se funciona.[/quote]
Isso pode ser perigoso.
Tenha certeza que a massa de dados pode ser dropada.

[quote=drsmachado][quote=tiago2109]Tenta mudar a Linha 12 para:

e ve se funciona.[/quote]
Isso pode ser perigoso.
Tenha certeza que a massa de dados pode ser dropada.[/quote]

Bom ele disse que o banco ainda esta sendo montado então não há problema algum.

Sim, eu entendi. Agora, ele precisa ter total certeza disto. Além de que, precisará, obrigatoriamente, mudar isso para mandar para produção…

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?

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 !!

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