[Resolvido] Erro Hibernate - ERRO: relação "tabela" não existe

6 respostas
BtAquino

Boa Noite,

Estou estudando a Apostila da Caelum FJ28, me deparo com o primeiro exercício de cadastrar um produto usando Hibernate.

Sei que com o uso deste Framework eu não preciso ir no banco de dados e criar a tabela, o mesmo cria para mim de acordo com os anotações.

Segui o exemplo da apostila, mas no momento de executar minha classe acontece o seguinte erro:

GRAVE: ERRO: relação "produto" não existe
  Posição: 13
Exception in thread "main" org.hibernate.exception.SQLGrammarException: could not insert: [modelo.Produto]

Minha classe produto está da seguinte maneira:

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

/**
 *
 * @author Administrador
 */
@Entity
public class Produto {
    @Id
    @GeneratedValue(strategy= GenerationType.IDENTITY)
    private Long idProduto;
    private String nome;
    private String descricao;
    private Double preco;

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    public Long getIdProduto() {
        return idProduto;
    }

    public void setIdProduto(Long idProduto) {
        this.idProduto = idProduto;
    }

    public String getNome() {
        return nome;
    }

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

    public Double getPreco() {
        return preco;
    }

    public void setPreco(Double preco) {
        this.preco = preco;
    }
    
    
    
}
Se eu mudo minha classe para
@GeneratedValue(strategy= GenerationType.AUTO)
ou
@GeneratedValue(strategy= GenerationType.SEQUENCE)

Acontece o seguinte erro:

GRAVE: ERRO: relação "hibernate_sequence" não existe

Segui os passos da apostila, mas estou usando o PostgresSQL/Netbeans e na apostila usam MySQL/Eclipse.

Alguém pode me ajudar e explicar o motivo do erro?

Grato.

6 Respostas

Hebert_Coelho

Vc criou a sequence?

Como está sua configuração hibernate.hbm2ddl.auto?

Fabiano_Abreu

Olá BtAquino,

No PostgreSQL, quando você usa

Você está forçando o uso do case sensitive, verifique se realmente a tabela produto existe. Veja se não é Produto, produtos…

Abraços.

_ _
Fabiano Abreu
Papo Sql - Um blog com tutoriais, dicas e truques sobre SQL

BtAquino

Boa Noite jakefrog,

Eu só segui os passo da apostila.

Que pediu apenas para configurar o hibernate.cfg.xml.
Criar a classe produto, que esta acima e uma classe adiciona Produto.

Executar e conferir se gerou a tabela no banco.

A classe adicona produto está assim:

import modelo.Produto;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.AnnotationConfiguration;

/**
 *
 * @author Administrador
 */
public class AdicionaProduto {
    public static void main(String [] args){
        
        AnnotationConfiguration configuration = new AnnotationConfiguration();
        configuration.configure();
        SessionFactory factory = configuration.buildSessionFactory();
        Session session = factory.openSession();
        
        Produto novoProduto = new Produto();
        
        novoProduto.setNome("Picanha");
        novoProduto.setDescricao("Picanha Congelada");
        novoProduto.setPreco(15.00);
        
        Transaction tx = session.beginTransaction();
        session.save(novoProduto);
        tx.commit();
    }
    
}

hibernate.cfg.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property>
        <property name="hibernate.connection.driver_class">org.postgresql.Driver</property>
        <property name="hibernate.connection.url">jdbc:postgresql://localhost:5432/GestaoAcademiaWEB</property>
        <property name="hibernate.connection.username">postgres</property>
        <property name="hibernate.connection.password">2504</property>
        <property name="show_sql">true</property>
        <property name="format_sql">true</property>
        <mapping class="modelo.Produto" />
    </session-factory>
</hibernate-configuration>
BtAquino

Boa Noite Fabiano Abreu ,

Mas o com Hibernate ele não irá criar a tabela produto automaticamente para mim no Postgres?

Eu não preciso ir no banco de dar um create table produto …

romarcio

BtAquino:
Boa Noite Fabiano Abreu ,

Mas o com Hibernate ele não irá criar a tabela produto automaticamente para mim no Postgres?

Eu não preciso ir no banco de dar um create table produto …

Para ele criar você precisa adicionar a propriedade “hibernate.hbm2ddl.auto = update” no arquivo hibernate.cfg.xml.

BtAquino

[quote=romarcio]

BtAquino:
Boa Noite Fabiano Abreu ,

Mas o com Hibernate ele não irá criar a tabela produto automaticamente para mim no Postgres?

Eu não preciso ir no banco de dar um create table produto …

Para ele criar você precisa adicionar a propriedade “hibernate.hbm2ddl.auto = update” no arquivo hibernate.cfg.xml.

Obrigado, era isso que estava ocasionando problemas.

Criado 15 de março de 2012
Ultima resposta 16 de mar. de 2012
Respostas 6
Participantes 4