Geração de tabelas automaticamente através da JPA/hibernate.[RESOLVIDO]  XML
Índice dos Fóruns » Persistência: Hibernate, JPA, JDBC e outros
Autor Mensagem
dgp_reginaldo
Thread.start()
[Avatar]

Membro desde: 18/08/2009 16:35:20
Mensagens: 34
Localização: Brasília
Offline

Olá Pessoal, não estou conseguindo gerar uma tabela a partir do JPA/hibernate.

Esse é o meu persistence.xml:


Esse é minha entidade que representa a tabela no banco de dados:


E aqui, a minha classe responsável por gerar o banco:


Já tenho o esquema meubanco criado direitinho. Quando executo o programa nenhuma exception é gerada porém o a tabela também não é gerada.
Vejam o log gerado:


É óbvio que eu posso construir a tabela na mão, e até fiz isso e criei uma classe de teste para inserir um registro e funcionou perfeitamente. Vejam a classe de teste:


A verdade é que eu fiquei intrigado por não ter conseguido gerar a tabela a partir da classe GeraTabela.java. Alguem poderia me responder porque não estou conseguindo gerar essas tabelas automaticamente pelo JPA/Hibernate?

This message was edited 1 time. Last update was at 13/02/2012 12:57:12


Sgt Reginaldo
[MSN]
Aleksandro
JavaChild

Membro desde: 14/04/2005 15:02:57
Mensagens: 119
Localização: São Bernardo do Campo
Offline

No arquivo persistence.xml você deve substituir



por

[code]<property name="hibernate.hbm2dll.auto" value="create" />

Flw....

http://br.linkedin.com/in/aleksandrolemosmartins
[WWW] [MSN]
Aleksandro
JavaChild

Membro desde: 14/04/2005 15:02:57
Mensagens: 119
Localização: São Bernardo do Campo
Offline

No arquivo persistence.xml você deve substituir



por



Flw...

http://br.linkedin.com/in/aleksandrolemosmartins
[WWW] [MSN]
jakefrog
GUJ Expert
[Avatar]

Membro desde: 22/01/2007 22:00:53
Mensagens: 4194
Online

Aleksandro wrote:No arquivo persistence.xml você deve substituir



por



Flw...

Eu não creio que o problema seja esse, pois o update tb faz create a primeira vez que você roda a aplicação e não existe as tabelas.

Vc criou o database no banco de dados?

Meu blog sobre java uaiHebert.com
Conceitos OO - Diga, não pergunte!, Lei de Demeter
TDD Primeiros Passos, JUnit com HSQLDB, JPA e Hibernate, Cobertura de testes com JUnit Ant e Emma, Cobrindo seus testes com Cobertura, JUnit, HSQLDB, JPA
Código Limpo: Partes: 01,02,03,04,05
Web/JSF - Criando um WebServer, Tratando Exceções, Autenticação de Usuários (Filter/Servlet), JSF - Hello World, AutoComplete, JSF: Converter e Bean Auto Complete, Validação de Login de Usuário com JSF e JAAS, JSF Exibindo Objeto e Mensagens após Redirect, JSF Exemplos Simples com Ajax, JSF Parametros por Get Request RESTFullAplicação Web Completa JSF EJB JPA JAAS, Lazy JSF Datatable Pagination (Primefaces)
Design Pattern - Strategy, Design Pattern - Observer (Parte 01), Design Pattern - Observer (Parte 02)
Business (JPA)- Hibernate 3 com JPA 2, Create schema script: Ant, Hibernate 3 e JPA 2, TableGenerator Chave Primária Simples, SequenceGenerator,Chave Primária Composta, Mapeando Datas (Date) e Enum, Mapeando Duas Tabelas em uma Classe, @OneToOne Unidirecional e Bidirecional, @OneToMany e @ManyToOne Unidirecional e Bidirecional, @ManyToMany Unidirecional e Bidirecional, Ordernando listas e utilizando Map como atributo mapeado,Uma tabela por herança, JPA Uma Classe por Sub-Classe, JPA Consultas e Dicas, [HOT]Quatro soluções para LazyInitializationException[HOT]

SCJP(1.6 - Ingles - 29/12/2009)
SCWCD(1.5 - Ingles - 30/06/2010)

Vamos em frente que atrás vem gente!
dgp_reginaldo
Thread.start()
[Avatar]

Membro desde: 18/08/2009 16:35:20
Mensagens: 34
Localização: Brasília
Offline

Eu usei tanto o valor create, quanto update e create-drop, mas não obtive sucesso. Eu criei o banco normalmente. Como vocês podem ver na classe de teste para inserção, consigo inserir normalmente depois que crio a tabela manualmente. Agradeço a atenção.

Sgt Reginaldo
[MSN]
jakefrog
GUJ Expert
[Avatar]

Membro desde: 22/01/2007 22:00:53
Mensagens: 4194
Online

Se você está utilizando apenas o JPA você nem precisaria dessa configuração: <class>modelo.Usuario</class>

Dá uma olhada nesse post, ele mostra o passo a passo para que o JPA crie a tabela para você: Hibernate 3 com JPA 2.

Vc pode ter pulado alguma etapa boba.

Meu blog sobre java uaiHebert.com
Conceitos OO - Diga, não pergunte!, Lei de Demeter
TDD Primeiros Passos, JUnit com HSQLDB, JPA e Hibernate, Cobertura de testes com JUnit Ant e Emma, Cobrindo seus testes com Cobertura, JUnit, HSQLDB, JPA
Código Limpo: Partes: 01,02,03,04,05
Web/JSF - Criando um WebServer, Tratando Exceções, Autenticação de Usuários (Filter/Servlet), JSF - Hello World, AutoComplete, JSF: Converter e Bean Auto Complete, Validação de Login de Usuário com JSF e JAAS, JSF Exibindo Objeto e Mensagens após Redirect, JSF Exemplos Simples com Ajax, JSF Parametros por Get Request RESTFullAplicação Web Completa JSF EJB JPA JAAS, Lazy JSF Datatable Pagination (Primefaces)
Design Pattern - Strategy, Design Pattern - Observer (Parte 01), Design Pattern - Observer (Parte 02)
Business (JPA)- Hibernate 3 com JPA 2, Create schema script: Ant, Hibernate 3 e JPA 2, TableGenerator Chave Primária Simples, SequenceGenerator,Chave Primária Composta, Mapeando Datas (Date) e Enum, Mapeando Duas Tabelas em uma Classe, @OneToOne Unidirecional e Bidirecional, @OneToMany e @ManyToOne Unidirecional e Bidirecional, @ManyToMany Unidirecional e Bidirecional, Ordernando listas e utilizando Map como atributo mapeado,Uma tabela por herança, JPA Uma Classe por Sub-Classe, JPA Consultas e Dicas, [HOT]Quatro soluções para LazyInitializationException[HOT]

SCJP(1.6 - Ingles - 29/12/2009)
SCWCD(1.5 - Ingles - 30/06/2010)

Vamos em frente que atrás vem gente!
dgp_reginaldo
Thread.start()
[Avatar]

Membro desde: 18/08/2009 16:35:20
Mensagens: 34
Localização: Brasília
Offline

Tentei sem o <class>modelo.Usuario</class> também, no desepero resolvi colocar. Mas tudo bem vou dar uma olhadinha no link. Obrigado.

Sgt Reginaldo
[MSN]
dgp_reginaldo
Thread.start()
[Avatar]

Membro desde: 18/08/2009 16:35:20
Mensagens: 34
Localização: Brasília
Offline

Caro JakeFrog,

O Exemplo citado no link também não gera a tabela automaticamente. O exemplo funciona já com a tabela criada no SQL. O que eu estou querendo saber é como fazer para gerar a tabela do banco a partir das configurações do JPA sem precisar escrever SQL para criação do banco. Obrigado.

Sgt Reginaldo
[MSN]
jakefrog
GUJ Expert
[Avatar]

Membro desde: 22/01/2007 22:00:53
Mensagens: 4194
Online

dgp_reginaldo wrote:Caro JakeFrog,

O Exemplo citado no link também não gera a tabela automaticamente. O exemplo funciona já com a tabela criada no SQL. O que eu estou querendo saber é como fazer para gerar a tabela do banco a partir das configurações do JPA sem precisar escrever SQL para criação do banco. Obrigado.

Eu acho que você entendeu errado.

No exemplo, é criado o database. O JPA não cria o database apenas as tabelas. Repare no post que você não vai ver nenhum comando create table, apenas created database.

O exemplo sim, gera automaticamente a tabela e explica como funciona essa opção:
"hibernate.hbm2ddl.auto" com essa opção ativada, o Hibernate atualizará suas tabelas quando necessário. Por exemplo, se a tabela não existir ela irá criar ("CREATE TABLE..."), se você adicionou uma coluna ("ALTER TABLE.."). Para testes vou deixar ativo, mas não aconselho a deixar essa opção ativada quando se trata de uma aplicação real. Não é uma boa escolha deixar essa alteração acontecer de modo automático em uma aplicação real. Deixe-a ativa apenas para teste local ou estudo.

Meu blog sobre java uaiHebert.com
Conceitos OO - Diga, não pergunte!, Lei de Demeter
TDD Primeiros Passos, JUnit com HSQLDB, JPA e Hibernate, Cobertura de testes com JUnit Ant e Emma, Cobrindo seus testes com Cobertura, JUnit, HSQLDB, JPA
Código Limpo: Partes: 01,02,03,04,05
Web/JSF - Criando um WebServer, Tratando Exceções, Autenticação de Usuários (Filter/Servlet), JSF - Hello World, AutoComplete, JSF: Converter e Bean Auto Complete, Validação de Login de Usuário com JSF e JAAS, JSF Exibindo Objeto e Mensagens após Redirect, JSF Exemplos Simples com Ajax, JSF Parametros por Get Request RESTFullAplicação Web Completa JSF EJB JPA JAAS, Lazy JSF Datatable Pagination (Primefaces)
Design Pattern - Strategy, Design Pattern - Observer (Parte 01), Design Pattern - Observer (Parte 02)
Business (JPA)- Hibernate 3 com JPA 2, Create schema script: Ant, Hibernate 3 e JPA 2, TableGenerator Chave Primária Simples, SequenceGenerator,Chave Primária Composta, Mapeando Datas (Date) e Enum, Mapeando Duas Tabelas em uma Classe, @OneToOne Unidirecional e Bidirecional, @OneToMany e @ManyToOne Unidirecional e Bidirecional, @ManyToMany Unidirecional e Bidirecional, Ordernando listas e utilizando Map como atributo mapeado,Uma tabela por herança, JPA Uma Classe por Sub-Classe, JPA Consultas e Dicas, [HOT]Quatro soluções para LazyInitializationException[HOT]

SCJP(1.6 - Ingles - 29/12/2009)
SCWCD(1.5 - Ingles - 30/06/2010)

Vamos em frente que atrás vem gente!
dgp_reginaldo
Thread.start()
[Avatar]

Membro desde: 18/08/2009 16:35:20
Mensagens: 34
Localização: Brasília
Offline

Eu entendi perfeitamente o exemplo. Criei o database e deixei o resto com a JPA. Veja o que deu:


Ele não gerou a tabela o que ocasionou essa exception aí quando executei a classe Main. Fiz tudo conforme seu tutorial. Vou continuar tentando. Obrigado!

Sgt Reginaldo
[MSN]
jakefrog
GUJ Expert
[Avatar]

Membro desde: 22/01/2007 22:00:53
Mensagens: 4194
Online

Só não entendi o pq dessa mensagem: "Table 'hello.user' doesn't exist "

Pq hello e . e user? Só não precisa colocar o nome da tabela?

Como que você anotou sua classe depois das alterações?

This message was edited 1 time. Last update was at 11/02/2012 22:29:26


Meu blog sobre java uaiHebert.com
Conceitos OO - Diga, não pergunte!, Lei de Demeter
TDD Primeiros Passos, JUnit com HSQLDB, JPA e Hibernate, Cobertura de testes com JUnit Ant e Emma, Cobrindo seus testes com Cobertura, JUnit, HSQLDB, JPA
Código Limpo: Partes: 01,02,03,04,05
Web/JSF - Criando um WebServer, Tratando Exceções, Autenticação de Usuários (Filter/Servlet), JSF - Hello World, AutoComplete, JSF: Converter e Bean Auto Complete, Validação de Login de Usuário com JSF e JAAS, JSF Exibindo Objeto e Mensagens após Redirect, JSF Exemplos Simples com Ajax, JSF Parametros por Get Request RESTFullAplicação Web Completa JSF EJB JPA JAAS, Lazy JSF Datatable Pagination (Primefaces)
Design Pattern - Strategy, Design Pattern - Observer (Parte 01), Design Pattern - Observer (Parte 02)
Business (JPA)- Hibernate 3 com JPA 2, Create schema script: Ant, Hibernate 3 e JPA 2, TableGenerator Chave Primária Simples, SequenceGenerator,Chave Primária Composta, Mapeando Datas (Date) e Enum, Mapeando Duas Tabelas em uma Classe, @OneToOne Unidirecional e Bidirecional, @OneToMany e @ManyToOne Unidirecional e Bidirecional, @ManyToMany Unidirecional e Bidirecional, Ordernando listas e utilizando Map como atributo mapeado,Uma tabela por herança, JPA Uma Classe por Sub-Classe, JPA Consultas e Dicas, [HOT]Quatro soluções para LazyInitializationException[HOT]

SCJP(1.6 - Ingles - 29/12/2009)
SCWCD(1.5 - Ingles - 30/06/2010)

Vamos em frente que atrás vem gente!
dgp_reginaldo
Thread.start()
[Avatar]

Membro desde: 18/08/2009 16:35:20
Mensagens: 34
Localização: Brasília
Offline

A classe está anotada exatamente assim:


Uma observação importante é que no tutorial você pede para criar o database hello com o camando e lá na propriedade de URL do Banco no persistence.xml você passa . Um hello escrito com "h" minusculo e outro "H" maiusculo. Eu deixei o database tudo com "h" minusculo. A unidade de persistencia deixei como estava mesmo: Hello com "H" maiusculo. OK?
Outra observação importante é que se eu crio a tabela user via SQL mesmo então a classe Main executa normalmente fazendo a inserção naturalmente.
Aqui vai o meu persistence.xml



Por fim a classe Main:




This message was edited 1 time. Last update was at 12/02/2012 08:39:31


Sgt Reginaldo
[MSN]
robson_costa
Debugger
[Avatar]

Membro desde: 27/12/2007 17:40:46
Mensagens: 62
Localização: São Paulo - SP
Offline

o nome da propriedade do hibernate está escrito errado, no lugar de:

<property name="hibernate.hbm2dll.auto" value="update" /> troque por
<property name="hibernate.hbm2ddl.auto" value="update" />

"It's not who you are underneath, it's what you do that defines you"
Rachel Dowes <- Batman Begins ->
[Email]
dgp_reginaldo
Thread.start()
[Avatar]

Membro desde: 18/08/2009 16:35:20
Mensagens: 34
Localização: Brasília
Offline

Realmente o problema estava no nome da propriedade do hibernate que estava escrito errado. Não é dll é ddl (Data Definition Language), dll são as malditas bibliotecas no Ruindows..nada a ver eu ter trocado um pelo o outro..rsrs.. Foi uma desatenção minha. Agradeço a todos que mobilizaram-se para tentar me ajudar em especial o amigo jakeFrog e o Robson_Costa que observou bem onde eu estava errando. Resolvido

This message was edited 1 time. Last update was at 13/02/2012 12:49:43


Sgt Reginaldo
[MSN]
 
Índice dos Fóruns » Persistência: Hibernate, JPA, JDBC e outros
Ir para:   
Powered by JForum 2.1.8 © JForum Team