Hibernate não cria tabela no banco postgresql[Resolvido]

20 respostas
java
D

Ola hibernate nao esta conseguindo criar tabela no banco de dados postgresql ele conecta normal mas nao cria a tabela segue codigo abaixo:

Entidade Estado

package br.pro.delfino.drogaria.domain;

import javax.persistence.Column;
import javax.persistence.Entity;

@SuppressWarnings(serial)

@Entity

public class Estado extends GenericDomain {

@Column(length = 2, nullable = false)

private String sigla;
@Column(length = 50, nullable = false)
private String nome;

public String getSigla() {
	return sigla;
}

public void setSigla(String sigla) {
	this.sigla = sigla;
}

public String getNome() {
	return nome;
}

public void setNome(String nome) {
	this.nome = nome;
}

}

HibernateUtil

package br.pro.delfino.drogaria.util;

import org.hibernate.SessionFactory;

import org.hibernate.boot.registry.StandardServiceRegistryBuilder;

import org.hibernate.cfg.Configuration;

import org.hibernate.service.ServiceRegistry;

public class HibernateUtil {
private static SessionFactory fabricaDeSessoes = criarFabricaDeSessoes();

public static SessionFactory getFabricaDeSessoes() {
	return fabricaDeSessoes;
}

private static SessionFactory criarFabricaDeSessoes() {
	try {
	Configuration configuracao = new Configuration().configure("hibernate.cfg.xml");
		
		ServiceRegistry registro = new StandardServiceRegistryBuilder().applySettings(configuracao.getProperties()).build();
		
		SessionFactory fabrica = configuracao.buildSessionFactory(registro);
		
		return fabrica;
	} catch (Throwable ex) {
		System.err.println("A fábrica de sessões não pode ser criada." + ex);
		throw new ExceptionInInitializerError(ex);
	}
}

}

HibernateUtilTest

package br.pro.delfino.drogaria.util;

import org.hibernate.Session;
import org.junit.Test;

public class HibernateUtilTest {

<a class="mention" href="/u/test">@Test</a>

public void conectar(){

Session sessao = HibernateUtil.getFabricaDeSessoes().openSession();

sessao.close();

HibernateUtil.getFabricaDeSessoes().close();

}

}

hibernate.cfg.xml

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

<session-factory>

	<!-- Configurações de Conexão com o Banco de Dados -->
	<property name="connection.driver_class">org.postgresql.Driver</property>
	<property name="connection.url">jdbc:postgresql://localhost:5432/drogaria</property>
	<property name="connection.username">postgres</property>
	<property name="connection.password">postgres</property>

	<!-- Pool de Conexões -->
	<property name="connection.pool_size">1</property>

	<!-- SQL dialect -->
	<property name="dialect">org.hibernate.dialect.PostgreSQLDialect</property>

	<!-- Gerenciamento do Contexto das Sessões -->
	<property name="current_session_context_class">thread</property>

	<!-- Cache de Segundo Nível -->
	<property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property>

	<!-- Mostra as SQLs Geradas -->
	<property name="show_sql">true</property>

	<!-- Cria as tabelas do banco de dados -->
	<property name="hbm2ddl.auto">create</property>
	
	<mapping class = "br.pro.delfino.drogaria.domain.Estado"/>
	<mapping class = "br.pro.delfino.drogaria.domain.GenericDomain"/>
</session-factory>

20 Respostas

C

está dando qual erro no console?

D
abr 29, 2019 10:47:08 PM org.hibernate.Version logVersion

INFO: HHH000412: Hibernate Core {5.4.2.Final}

abr 29, 2019 10:47:09 PM org.hibernate.annotations.common.reflection.java.JavaReflectionManager 

INFO: HCANN000001: Hibernate Commons Annotations {5.1.0.Final}

abr 29, 2019 10:47:10 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure

WARN: HHH10001002: Using Hibernate built-in connection pool (not for production use!)

abr 29, 2019 10:47:10 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator

INFO: HHH10001005: using driver [org.postgresql.Driver] at URL [jdbc:postgresql://localhost:5432/drogaria]

abr 29, 2019 10:47:10 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator

INFO: HHH10001001: Connection properties: {user=postgres, password=****}

abr 29, 2019 10:47:10 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator

INFO: HHH10001003: Autocommit mode: false

abr 29, 2019 10:47:10 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections 

INFO: HHH000115: Hibernate connection pool size: 1 (min=1)

abr 29, 2019 10:47:10 PM org.hibernate.dialect.Dialect 

INFO: HHH000400: Using dialect: org.hibernate.dialect.PostgreSQLDialect

abr 29, 2019 10:47:11 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PoolState stop

INFO: HHH10001008: Cleaning up connection pool [jdbc:postgresql://localhost:5432/drogaria]

no console fica assim

C

tem mais de 2 anos que não trabalho com java. mas teve uma vez que passei por essa situação e no meu caso foi o usuário do banco que não tinha permissão de criar as tabelas.
verifique se o usuário que tu está utilizando tem permissão de criar as tabelas.

D

vou verificar mas acontece mais no mysql pelo q vi

J

Esse log não apresenta nenhum erro, se observar, apesar da quantidade de linhas escritas elas são INFO, ou seja, informações sobre o que está acontecendo.
Você tem apenas um log WARN, mas não é um erro, é só um alerta.

D

sim eu sei… so que nao esta criando a tabela do mesmo jeito

D

Está faltando coisas nesse log. Deveria haver ao menos uma linha contendo algo como “table blablabla does not exists” indicando que ele não achou a tabela e irá criar.
Apenas recordando: a propriedade hbm2ddl.auto possui alguns “perfis”: create e create-drop apagam a estrutura do banco e criam novamente (tabelas, índices, etc). A opção update cria e mantém criada, aplicando alterações conforme demanda.

D

ta create

D
<!-- Configurações de Conexão com o Banco de Dados -->
<property name="connection.driver_class">org.postgresql.Driver</property>
<property name="connection.url">jdbc:postgresql://localhost:5432/drogaria</property>
<property name="connection.username">postgres</property>
<property name="connection.password">postgres</property>

<!-- Pool de Conexões -->
<property name="connection.pool_size">1</property>

<!-- SQL dialect -->
<property name="dialect">org.hibernate.dialect.PostgreSQLDialect</property>

<!-- Gerenciamento do Contexto das Sessões -->
<property name="current_session_context_class">thread</property>

<!-- Cache de Segundo Nível -->
<property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property>

<!-- Mostra as SQLs Geradas -->
<property name="show_sql">true</property>

<!-- Cria as tabelas do banco de dados -->
<property name="hbm2ddl.auto">create</property>

<mapping class = "br.pro.delfino.drogaria.domain.Estado"/>
<mapping class = "br.pro.delfino.drogaria.domain.GenericDomain"/>
D

Sim, eu li isso e por essa mesma razão comentei.
Como você verificou que não criou as tabelas?

D

abri o banco de dados dei um refresh nao ta la

D

é o postgresql

D

Mas a aplicação deu erro? Exceção de tabela inexistente ou algo assim? Ou nem tentou persistir e recuperar algo?

D

Está no título da tua postagem.

D

nada de erro no console so aparece isso

abr 30, 2019 2:19:42 PM org.hibernate.Version logVersion

INFO: HHH000412: Hibernate Core {5.4.2.Final}

abr 30, 2019 2:19:45 PM org.hibernate.annotations.common.reflection.java.JavaReflectionManager 

INFO: HCANN000001: Hibernate Commons Annotations {5.1.0.Final}

abr 30, 2019 2:19:45 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure

WARN: HHH10001002: Using Hibernate built-in connection pool (not for production use!)

abr 30, 2019 2:19:45 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator

INFO: HHH10001005: using driver [org.postgresql.Driver] at URL [jdbc:postgresql://localhost:5432/drogaria]

abr 30, 2019 2:19:45 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator

INFO: HHH10001001: Connection properties: {user=postgres, password=****}

abr 30, 2019 2:19:45 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator

INFO: HHH10001003: Autocommit mode: false

abr 30, 2019 2:19:45 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections 

INFO: HHH000115: Hibernate connection pool size: 1 (min=1)

abr 30, 2019 2:19:46 PM org.hibernate.dialect.Dialect 

INFO: HHH000400: Using dialect: org.hibernate.dialect.PostgreSQLDialect

abr 30, 2019 2:19:47 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PoolState stop

INFO: HHH10001008: Cleaning up connection pool [jdbc:postgresql://localhost:5432/drogaria]
D

Deixa eu tentar ser mais claro: você executou testes no sistema para verificar se funciona? Se grava no banco? Se busca/recupera?

D

era um teste apenas para gerar tabela estava vendo a aula do Roberto Delfino mas vou tentar aqui ver se grava algo obrigada

D

Entendi.
É uma boa ideia revisar a aula toda, ver se não faltou nada.

D

é vou ter q ver denovo :confused:

D

era a versão do hibernate tipo era 4.3 e agora é 5.8 acho que a atual usa persistence.xml e as mais antigas dava pra usar hibernate.cfg.xml tipo que colocar a antiga pra fazer o curso.

Criado 30 de abril de 2019
Ultima resposta 6 de mai. de 2019
Respostas 20
Participantes 4