Alter table com hibernate![resolvido]

Pessoal pra criar meu banco de dados com hibernate eu tenho usado o seguinte código. Entretanto quando quero atualizar alguma propriedade do banco o que eu tenho
feito é executar esse código que limpa toda a minha base de dados e sinceramente isso vai ser um problema quando a minha aplicação estiver rodando eu li em alguns
posts que a solução pra isso era continuar com o mesmo código e alterar apenas essa linha no cfg.xml de create para update mas isso não funcionou… Alguém têm solução
pra isso alterar as propriedades da tabela sem precisar limpar o banco de dados via hibernate, acredito que tenha uma solução.

<property name="hbn2dll.auto">create</property>
<property name="hbn2dll.auto">update</property>

[code]
public static void main(String[] args) {
// TODO Auto-generated method stub

	Configuration cfg = new AnnotationConfiguration();       
	cfg.configure();       
	SchemaExport se = new SchemaExport(cfg);       
	se.create(true, true); 
}[/code]

Quando vc tem uma aplicação usando um container/framework como o caso do Spring, EJB, JPA basta vc informar no arquivo de configuração do ORM para usar update/create.
Agora quando vc usa inicia o hibernate na mao, (main) vc precisa usar outras classes ou método, que no momento não lembro o nome.
Seria algo similar a isto:

[code]
Configuration cfg = new AnnotationConfiguration();
cfg.configure();
SchemaExport se = new SchemaExport(cfg);
//ou SchemaUpdateExport se = new SchemaUpdateExport (cfg);

se.create(true, true);  
//ou algo assim:     se.create(false, false);  (talvez um parametros deste método que faz dropar os dados)
//ou algo assim:   se.update(...)[/code]

Este seu codigo, se estou ñ estou enganado não diz para o hirbenar usar o modo update/create, deveria ser assim:

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

certo então é só eu colocar da forma como vc está me mostrando ae no cfg.xml e rodar aplicação q ele irá atualizar o banco??
ou tenho q criar algum código…

[quote=vinkello]certo então é só eu colocar da forma como vc está me mostrando ae no cfg.xml e rodar aplicação q ele irá atualizar o banco??
ou tenho q criar algum código…[/quote]

faça o teste usando a tag como postei, mas faça o teste em uma base de teste para vc ñ correr o risco apagar seus dados.

vlw galera

ProdutoController.java

package br.com.caelum.estoque;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

import br.com.caelum.estoque.interfaces.ProdutoDAO;
import br.com.caelum.estoque.model.Produto;

@Controller
@RequestMapping(value="/produtos")
public class ProdutoController {

@Autowired
@Qualifier("produtoHibernateDAO")
private ProdutoDAO produtoDAO;

/*
 * http://localhost:8080/estoque/produtos/listar.html
 */
@RequestMapping(value="/listar", method=RequestMethod.GET)
public ModelAndView listar(){
	ModelAndView modelAndView = new ModelAndView("produtos/lista");
	modelAndView.addObject(produtoDAO.listar());
	return modelAndView;
}

@RequestMapping(value="/mostrar/{id}", method=RequestMethod.GET)
public ModelAndView mostrar(@PathVariable long id){
	ModelAndView modelAndView = new ModelAndView("produtos/mostrar");
	modelAndView.addObject(produtoDAO.buscarPorId(id));
	return modelAndView;
}

/*
 * http://localhost:8080/estoque/produtos/form.html
 */
@RequestMapping(value="/form", method=RequestMethod.GET)
public String form(){
	return "produtos/form";
}

@RequestMapping(value="/salvar", method=RequestMethod.POST)
public String salvar(Produto produto){
	produtoDAO.salvar(produto);
	return "redirect:/produtos/listar.html";
}

@RequestMapping(value="/alterar", method=RequestMethod.POST)
public String alterar(Produto produto){
	produtoDAO.alterar(produto);
	return "redirect:/produtos/listar.html";
}

@RequestMapping(value="/editar/{id}", method=RequestMethod.GET)
public ModelAndView editar(@PathVariable Long id){
	Produto produto = produtoDAO.buscarPorId(id);
	ModelAndView modelAndView = new ModelAndView("produtos/editar");
	modelAndView.addObject(produto);
	return modelAndView;
}

@RequestMapping(value="/apagar")
public String apagar(Long id){
	Produto produto = produtoDAO.buscarPorId(id);
	produtoDAO.remove(produto);
	return "redirect:/produtos/listar.html";
}

}

ProdutoHibernate.java
package br.com.caelum.estoque.dao;

import java.util.List;

import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

import br.com.caelum.estoque.interfaces.ProdutoDAO;
import br.com.caelum.estoque.model.Produto;

@Component
@Transactional
public class ProdutoHibernateDAO implements ProdutoDAO {

private SessionFactory sessao;

@Autowired
public ProdutoHibernateDAO(SessionFactory factory){
	this.sessao = factory;
}

@Override
public void salvar(Produto produto) {
	sessao.openSession().save(produto);
}

@Override
public void alterar(Produto produto) {
	sessao.openSession().update(produto);
}

@SuppressWarnings("unchecked")
@Override
public List<Produto> listar() {
	List<Produto> produtos = sessao.openSession().createQuery("from Produto").list();
	return produtos;
}

@Override
public Produto buscarPorId(Long id) {
	return (Produto) sessao.openSession().get(Produto.class, id);
}

@Override
public void remove(Produto produto) {
	sessao.openSession().delete(produto);
}

}

Produto.java

package br.com.caelum.estoque.model;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
public class Produto {

private static long contador = 0;

@Id
@GeneratedValue
private long id;
private String descricao;
private Integer quantidade;
	
public Produto(){
	setId(getId() + 1);
	contador++;
	id = contador;
}

public String getDescricao() {
	return descricao;
}

public void setDescricao(String descricao) {
	this.descricao = descricao;
}

public Integer getQuantidade() {
	return quantidade;
}

public void setQuantidade(Integer quantidade) {
	this.quantidade = quantidade;
}

public long getId() {
	return id;
}

public void setId(long id) {
	this.id = id;
}

}

e app-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<context:annotation-config/>
<context:component-scan base-package="br.com.caelum.estoque"/>
<mvc:annotation-driven/>

<bean
	class="org.springframework.web.servlet.view.InternalResourceViewResolver">
	<property name="prefix" value="/WEB-INF/views/" />
	<property name="suffix" value=".jsp" />
</bean>

<bean id="produtoHibernateDAO" class="br.com.caelum.estoque.dao.ProdutoHibernateDAO"/>

<bean id="sessionFactory"
    class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"
    destroy-method="destroy">
    
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.connection.url">jdbc:mysql://localhost:3306/fj27</prop>
            <prop key="hibernate.connection.driver_class">com.mysql.jdbc.Driver</prop>
            <prop key="hibernate.connection.username">root</prop>
            <prop key="hibernate.connection.password">microsoft</prop>
            <prop key="hibernate.connection.autocommit">true</prop>
            <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hibernate.format_sql">true</prop>
            <prop key="hibernate.hbm2ddl.auto">update</prop>
        </props>
    </property>
    <property name="annotatedClasses">
        <list>
            <value>br.com.caelum.estoque.model.Produto</value>
            <value>br.com.caelum.estoque.model.Movimentacao</value>
        </list>
    </property>
</bean>


<bean id="transactionManager"
    class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory"/>
</bean>

<bean id="produto" class="br.com.caelum.estoque.model.Produto"/>

<tx:annotation-driven/>

Oi gente eu estou tentando modificar um dados meu mas não estou conseguindo. O que falta? O meu código está acima eu estou utilizando o Spring 3.0.1.