Criação de tabelas no banco automaticamente pelo hibernate

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:

Olá,

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

1 curtida

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

Boa tarde,

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

Ve ai se vai funcionar agora.

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

Felipe,

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

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.

Dar uma olhada nesse link

link

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

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.

Tenta isso aqui

link

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>

tente mudar para dll

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

Persistence.createEntityManagerFactory("br.com");

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>

porem mesmo assim não está funcionando

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

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

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

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.