Porque não cria a tabela ? [RESOLVIDO]

10 respostas
khaoz

Meu hibernate.properties (no lugar certo):

hibernate.dialect org.hibernate.dialect.PostgreSQLDialect
hibernate.connection.driver_class org.postgresql.Driver
hibernate.connection.url jdbc:postgresql:meudb
hibernate.connection.username eu
hibernate.connection.password minhasenha

Por que esse código roda sem erros, mas não cria a tabela:

import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.tool.hbm2ddl.SchemaExport;

public class GeraTabelas {
    public static void main(String[] args) {
        AnnotationConfiguration cfg = new AnnotationConfiguration();

        cfg.addAnnotatedClass(Produto.class);

        new SchemaExport(cfg).create(true, true);
    }
}

10 Respostas

thiagocg

Vc mapeou as classes no hibernate.cfg.xml???

khaoz

O fato de usar anotação não elimina essa necessidade ?

thiagocg

Eu sempre uso o hibernate e anotação, qd por acaso eu esqueço de mapear alguma classe la no hibernate.cfg.xml ela simplesmente não é criada, até fiz um teste agora e não mapeei de proposito metada das classes de um sistema q gerei o bd ontem, como disse as classes não mapeadas não apareceram no bd!

Mas o mapeamento é simples, nada como os antigos xml’s do hibernate, basta vc fazer assim:

respeitando a sua hierarquia de pacotes e nomes de classe.

Tenta ai e me diz se deu certo!

[ ]'s

khaoz

Infelizmente não funcionou. O meu hibernate.cfg.xml esta assim:

<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
    <session-factory>
        <mapping class="teste.Produto"/>
    </session-factory>
</hibernate-configuration>

E o output ao rodar a classe GeraTabelas é esse:

2 [main] INFO org.hibernate.cfg.annotations.Version - Hibernate Annotations 3.4.0.GA
24 [main] INFO org.hibernate.cfg.Environment - Hibernate 3.3.1.GA
32 [main] INFO org.hibernate.cfg.Environment - loaded properties from resource hibernate.properties: {hibernate.connection.username=giuliani, hibernate.connection.password=****, hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect, hibernate.connection.url=jdbc:postgresql:teste, hibernate.bytecode.use_reflection_optimizer=false, hibernate.connection.driver_class=org.postgresql.Driver}
37 [main] INFO org.hibernate.cfg.Environment - Bytecode provider name : javassist
45 [main] INFO org.hibernate.cfg.Environment - using JDK 1.4 java.sql.Timestamp handling
131 [main] INFO org.hibernate.annotations.common.Version - Hibernate Commons Annotations 3.1.0.GA
134 [main] INFO org.hibernate.cfg.Configuration - configuring from resource: /hibernate.cfg.xml
134 [main] INFO org.hibernate.cfg.Configuration - Configuration resource: /hibernate.cfg.xml
249 [main] INFO org.hibernate.cfg.Configuration - Configured SessionFactory: null
267 [main] INFO org.hibernate.dialect.Dialect - Using dialect: org.hibernate.dialect.PostgreSQLDialect
380 [main] INFO org.hibernate.cfg.AnnotationConfiguration - Hibernate Validator not found: ignoring
386 [main] INFO org.hibernate.tool.hbm2ddl.SchemaExport - Running hbm2ddl schema export
388 [main] INFO org.hibernate.tool.hbm2ddl.SchemaExport - exporting generated schema to database
391 [main] INFO org.hibernate.connection.DriverManagerConnectionProvider - Using Hibernate built-in connection pool (not for production use!)
392 [main] INFO org.hibernate.connection.DriverManagerConnectionProvider - Hibernate connection pool size: 20
392 [main] INFO org.hibernate.connection.DriverManagerConnectionProvider - autocommit mode: false
412 [main] INFO org.hibernate.connection.DriverManagerConnectionProvider - using driver: org.postgresql.Driver at URL: jdbc:postgresql:teste
412 [main] INFO org.hibernate.connection.DriverManagerConnectionProvider - connection properties: {user=giuliani, password=****}
484 [main] INFO org.hibernate.tool.hbm2ddl.SchemaExport - schema export complete
485 [main] INFO org.hibernate.connection.DriverManagerConnectionProvider - cleaning up connection pool: jdbc:postgresql:teste
thiagocg

vc criou o bd vazio la na postgres?

thiagocg

tenta mudar sua classe de geração do bd.

testa isso

//cria uma configuracao
AnnotationConfiguration cfg = new AnnotationConfiguration();
						
//hibernate.cfg.xml
cfg.configure();
		
//Responsável pela criação do schema e execução
SchemaExport export = new SchemaExport(cfg);
		
//export.create(imprimir o sql, se deve executar)
//drop e cria novamente a tabela
export.create(true, true);

a linha do exporSchema não esta na sua classe talves pode ser isso tb!!

khaoz

Eu tentei colocar tudo dentro do hibernate.cfg.xml o que também não ajudour.
Quanto ao meu código, ta muito parecido com o seu, exceto pelo fato de que não estou armazenando o resultado o new em uma variável. Vou testar isso a noite.

thiagocg:

a linha do exporSchema não esta na sua classe talves pode ser isso tb!!

Não entendi essa útlima afirmação.

[]'s (e obrigado pela ajuda).

thiagocg

Hummm, realmente, não havia percebido q vc não estava armazenando em uma variavel, bom amigo, então esgotei minhas possibilidades.

ahh vc ñ respondeu se criou o bd vazio la no postgres!!!

abraço!

khaoz

O bd esta criado e possui duas tabelas. Não acredito que isso possa interferir. Eu vou pesquisar mais um pouco e fazer alguns testes a mais a noite.

Muito obrigado.

[]'s

khaoz

Resolvido.

Na minha classe Produto, eu havia importado o org.hibernate.annotation.Entity quando o correto é javax.persistence.Entity para a anotação @Entity

Criado 28 de novembro de 2008
Ultima resposta 3 de dez. de 2008
Respostas 10
Participantes 2