Criação de tabelas no banco automaticamente pelo hibernate

25 respostas
F

Boa tarde pessoal!

Estou tentando criar uma aplicação que gere as tabelas automaticamente no banco através do hibernate, acontece que eu criei as classes configurei o persistence.xml e criei o banco, mas quando rodo a aplicação ela não esta gerando as tabelas e o servidor não aponta nenhum erro, segue as telas das classes que eu criei e como eu configurei o arquivo persistence.xml:

Classes:

Se alguém puder me ajudar a resolver o problema eu agradeço!!!:slightly_smiling_face:

25 Respostas

Weverton_Reis

Olá,

A propriedade hibernate.hbm2dll.auto não seria create?

F

Não eu já alterei para create e mesmo assim ele não está gerando as tabelas até poque a propriedade ddl como update, se a tabela não existir no banco ela deveria criar automático.

Eu vi uma mensagem no console do servidor e vou colocar mais 2 prints aqui uma da estrutura do projeto e outra da mensagem que aparece no console, segue as imagens abaixo:

mensagem do console:

Eu não sei se está alguma coisa errada na estrutura e por isso quando roda ele não gera as tabelas

Weverton_Reis

Boa tarde,

Seu persistence-unit deve se chamar persistence-unit name="Orcamento" ou Persistence.createEntityManagerFactory("br.com");

Ve ai se vai funcionar agora.

F

Welverton eu tentei dos dois jeitos porém ainda não está criando as tabelas no banco

Weverton_Reis

Felipe,

Da uma olhada nesse projeto e verifica se pode te ajudar em algo.

F

Deixa eu te perguntar uma coisa como seu projeto é spring mvc, as configurações serviriam para o meu projeto? pois eu estou usando o jsf.

Eduardo_Maranata10

Dar uma olhada nesse link

link

F

Eduardo eu reproduzi o que estava neste link e mesmo assim não funciona, eu também alterei a função de criar tabelas mas mesmo assim não funciona… eu deixei a tabela deste jeito:

package br.com.testebuffet.tarefa.jpa;

import javax.persistence.EntityManager;

import javax.persistence.EntityManagerFactory;

import javax.persistence.Persistence;

import br.com.teste.tabelas.modelo.*;

public class CriaTabelas {
public static void main(String[] args) {
	EntityManagerFactory factory = Persistence.createEntityManagerFactory("br.com");
    EntityManager entityManager = factory.createEntityManager();
    factory.close();

}

}

porem o console sempre continua igual mas nao esta gerando as tabelas no banco

F

O problema é que como sugeriram e também seguindo o material da caelum e outros materiais que eu vi na internet, fala que é preciso criar um folder com o nome META-INF e dentro colocar o arquivo persistence.xml, porém o projeto ficou com duas pastas META-INF, isso seria normal?? Não sei se isso também está gerando algum tipo de conflito.

Eduardo_Maranata10

Tenta isso aqui

link

F

Eu verifiquei a property n arquivo persistence e ela está certa… eu até alterei o arquivo persistence pra ver senão era alguma coisa errada no arquivo e ficou assim, mas mesmo assim não funciona…
o persistence ficou da seguinte maneira:

<?xml version="1.0" encoding="UTF-8"?>

<persistence version=“2.0”

xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence_2_0.xsd">
<persistence-unit name="br.com" transaction-type="RESOURCE_LOCAL">
	<provider>org.hibernate.ejb.HibernatePersistence</provider>
	
	<class>br.com.teste.tabelas.modelo.Orcamento</class>
	<class>br.com.teste.tabelas.modelo.CadastroClientes</class>
	<class>br.com.teste.tabelas.modelo.EstoqueLocal</class>
	<class>br.com.teste.tabelas.modelo.EstoqueCentral</class>
	
	<properties>
		<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" />
		<property name="hibernate.hbm2ddl.auto" value="update" />
		<property name="hibernate.show_sql" value="true" />
		<property name="hibernate.format_sql" value="true" />
		<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
		<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/testeb" />
		<property name="javax.persistence.jdbc.user" value="root" />
		<property name="javax.persistence.jdbc.password" value="root" />
	</properties>
</persistence-unit>
Eduardo_Maranata10

tente mudar para dll

raphaeloneves

vc nomeou seu persistence-unit como “br.com”, mas está tentando criar a factory do PU “Orcamento”.

Persistence.createEntityManagerFactory("br.com");

F

não entendi o que você quis dizer Raphael, no caso a funcão de criar tabelas ficou do jeito como você acabou de citar e o persistence unit é br.com vou printar aqui novamente como está a função e o persistence

a classe está assim:

package br.com.testebuffet.tarefa.jpa;

import javax.persistence.EntityManager;

import javax.persistence.EntityManagerFactory;

import javax.persistence.Persistence;

import br.com.teste.tabelas.modelo.*;

public class CriaTabelas {
public static void main(String[] args) {
	EntityManagerFactory factory = Persistence.createEntityManagerFactory("br.com");
    EntityManager entityManager = factory.createEntityManager();
    factory.close();

}

}

e o arquivo ersistence.xml está assim:

<?xml version="1.0" encoding="UTF-8"?>

<persistence version=“2.0”

xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence_2_0.xsd">
<persistence-unit name="br.com" transaction-type="RESOURCE_LOCAL">
	<provider>org.hibernate.ejb.HibernatePersistence</provider>
	
	<class>br.com.teste.tabelas.modelo.Orcamento</class>
	<class>br.com.teste.tabelas.modelo.CadastroClientes</class>
	<class>br.com.teste.tabelas.modelo.EstoqueLocal</class>
	<class>br.com.teste.tabelas.modelo.EstoqueCentral</class>
	
	<properties>
		<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" />
		<property name="hibernate.hbm2ddl.auto" value="update" />
		<property name="hibernate.show_sql" value="true" />
		<property name="hibernate.format_sql" value="true" />
		<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
		<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost/localhost:3306/testeb" />
		<property name="javax.persistence.jdbc.user" value="root" />
		<property name="javax.persistence.jdbc.password" value="root" />
	</properties>
</persistence-unit>
F

porem mesmo assim não está funcionando

F

se mudar pra dll não funciona, eu até deixei com ddl, pois estava vendo em outros lugares e exemplos de persistence e todos estão como ddl

Weverton_Reis

Boa noite Felipe,

Estou começando a suspeitar que você esta colocando o código nesse método main e subindo o servidor e esperando que ele seja chamado. =)

Opções:

1 - Executa o método main como aplicação java e gera suas tabelas.
ou
2 - Cria essa classe e sobe o servidor.

public class JPAUtil {

	private static EntityManagerFactory emf = Persistence
.createEntityManagerFactory("NOME_QUE_VC_ESTA_UTILIZANDO_NO_PERSISTENCE");

	public EntityManager getEntityManager() {
		return emf.createEntityManager();
	}
}

Testa ai

F

Weverton ainda continua sem criar as tabelas mesmo colocando a classe que você criou ou colocando a classe antiga sem o método main… o problema poderia ser do eclipse e a versão dele??? no caso eu estou usando o eclipse luna-jee-SR2

javaflex

Estude exemplos antes de aplicar no seu projeto.

No mais, o tempo que se perde com hibernate e modelo orientado a objetos já teria há bastante tempo criado as tabelas no banco através de modelagem relacional.

F

Eu vi os exemplos e a explicação da propriedade hbm2ddl, porem eu tive uma duvida, o arquivo hibernate.cfg.xml é necessário mesmo tendo o persistence.xml???

javaflex

Nunca usei JPA, mas pelo que leio persistence.xml é pra quem segue JPA. hibernate.cfg.xml é pra quem usa Hibernate puro, que é mais tranquilo do que ficar refém do JPA.

F

Na verdade só o hibernate puro não funcionaria pra mim…

javaflex

O que não funciona?

F

Usando hibernate puro a aplicação web conseguiria gerenciar todas as atividades no banco de dados??

javaflex

Sim, e até mesmo sem Hibernate, trabalhando direto com a linguagem padrão do banco.

JPA é só um padrão (inspirado no próprio Hibernate), que abstrai implementacoes de ORM (que abstrai o banco). Mas como a maioria no mundo Java gosta de n abstrações, vai se acostumando mesmo com JPA.

Criado 16 de novembro de 2017
Ultima resposta 24 de nov. de 2017
Respostas 25
Participantes 5