Hibernate hbm2ddl

Boas pessoal.

Estou com a seguinte dúvida, preciso gerar mais algumas tabelas com alguns relacionamentos com a seguinte classe.

public class GeraTabelaUtil {
	
public static void main(String[] args) {
		
		AnnotationConfiguration cfg = new AnnotationConfiguration();
		cfg.configure();
		
		SessionFactory factory = cfg.buildSessionFactory();
		Session session = factory.openSession();
		
		System.out.println("------ CONECTADO NO BANCO COM HIBERNATE ------ ");
		
		new SchemaExport(cfg).create(true, true);
		
	}

}

Só que não pode de jeito nenhum dar um drop em todas as tabelas e recrialas pois tenho dados importantes, quero saber se ao colocar esse campo em meu hibernate.cfg.xml resolve o problema do drop

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

ou se existe alguma maneira de se fazer isso? se não vou ter de criar as tabelas na mão…

vlw

Sim, resolve.

Estou vendo a query gerada pelo hibernate no console e ele está dando o Drop.

     
    alter table DadosUsuario 
        drop constraint FK31A8AD2314CE3A91

    alter table Debate 
        drop constraint FK79C6D71129FD6B9D    

    drop table DadosUsuario

    drop table Debate
    

    create table DadosUsuario (
        id numeric(19,0) identity not null,
        Ip_acesso int not null,
        dataDeAcesso datetime null,
        usuariosClube_cpf numeric(19,0) null,
        primary key (id)
    )

     create table Debate (
        id numeric(19,0) identity not null,
        comentario varchar(255) null,
        destaquesDebate_id numeric(19,0) null,
        usuariosClube_cpf numeric(19,0) null,
        primary key (id)
    )

:?

tenta

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

Ainda está dropando!
:?

coloca seu hibernate.cfg.xml aqui

<session-factory name="foo">
		<property name="hibernate.connection.provider_class">
 		 org.hibernate.connection.C3P0ConnectionProvider
		</property>
		<property name="hibernate.c3p0.min_size">20</property>
		<property name="hibernate.c3p0.max_size">75</property>
		<property name="hibernate.c3p0.timeout">180</property>
		<property name="hibernate.c3p0.idle_test_period">100</property>

        <property name="hibernate.connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>
        <property name="hibernate.connection.password">password</property>
        <property name="hibernate.connection.url">url</property>
        <property name="hibernate.connection.username">username</property>
        <property name="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</property>

       	<property name="hibernate.show_sql">true</property>
       	<property name="hibernate.format_sql">true</property>       
       	<property name="hibernate.hbm2ddl.auto">none</property>
       	
        <!--  Aqui o mapeamento dos modelos    -->

</session-factory>

Boa tarde, já usei a instrução update no xml e ele não dropa as tabelas já existentes.

Mas se está com medo de fazer isso, use sua classe:


public static void main(String[] args) {
		
		AnnotationConfiguration cfg = new AnnotationConfiguration();
		cfg.configure();
		
		SessionFactory factory = cfg.buildSessionFactory();
		Session session = factory.openSession();
		
		System.out.println("------ CONECTADO NO BANCO COM HIBERNATE ------ ");
		
		new SchemaExport(cfg).create(true, true);
		
	}

}

E indique apenas as classes que irão criar as novas tabelas.
Se você setou no xml as classes de mapeamento, deixe lá apenas as que você quer gerar. Depois de criadas, recoloque as classes retiradas.

[quote=Ace]Ainda está dropando!
:? [/quote]
Camarada, o problema é que com schema.export(true, true), sempre irá dropar.
Você não precisa desse cara para criar as tabelas.
Usando a propriedade hibernate.hbm2ddl.auto com valor update, as tabelas são criadas “on demand”, ou seja, quando for preciso (geralmente no primeiro uso do hibernate), em tempo de execução.

Então, adicione essa linha ao teu hibernate.cfg.xml e faça o projeto ser executado que as tabelas serão criadas.

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

P.S.: Os valores aceitos pela propriedade hibernate.hbm2ddl.auto não incluem “none”

drsmachado,
Valew pela explicação, assim que rodar o projeto e der tudo certo fecho aqui o topico, caso contrario posto algum eventual erro…