Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Tabela livrariadb.autor não existe

Tentei executar o popula banco da aula 3, mas sem sucesso ele me retorna esse erro:

ERROR: Table 'livrariadb.autor' doesn't exist
Exception in thread "main" javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: Table 'livrariadb.autor' doesn't exist
    at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1377)
    at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1300)
    at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1306)
    at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:871)
    at br.com.caelum.livraria.dao.PopulaBanco.main(PopulaBanco.java:22)
Caused by: org.hibernate.exception.SQLGrammarException: Table 'livrariadb.autor' doesn't exist
    at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:82)
    at 

Meus arquivos:

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-ins
package br.com.caelum.livraria.dao;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import javax.persistence.EntityManager;

import br.com.caelum.livraria.modelo.Autor;
import br.com.caelum.livraria.modelo.Livro;

public class PopulaBanco {

    public static void main(String[] args) {

        EntityManager em = new JPAUtil().getEntityManager();

        em.getTransaction().begin();

        Autor assis = geraAutor("Machado de Assis");
        em.persist(assis);

        Autor amado = geraAutor("Jorge Amado");
        em.persist(amado);

        Autor coelho = geraAutor("Paulo Coelho");
        em.persist(coelho);

        Livro casmurro = geraLivro("978-8-52-504464-8", "Dom Casmurro",
                "10/01/1899", 24.90, assis);
        Livro memorias = geraLivro("978-8-50-815415-9",
                "Memorias Postumas de Bras Cubas", "01/01/1881", 19.90, assis);
        Livro quincas = geraLivro("978-8-50-804084-1", "Quincas Borba",
                "01/01/1891", 16.90, assis);

        em.persist(casmurro);
        em.persist(memorias);
        em.persist(quincas);

        Livro alquemista = geraLivro("978-8-57-542758-3", "O Alquimista",
                "01/01/1988", 19.90, coelho);
        Livro brida = geraLivro("978-8-50-567258-7", "Brida", "01/01/1990",
                12.90, coelho);
        Livro valkirias = geraLivro("978-8-52-812458-8", "As Valkirias",
                "01/01/1992", 29.90, coelho);
        Livro maao = geraLivro("978-8-51-892238-9", "O Diario de um Mago",
                "01/01/1987", 9.90, coelho);

        em.persist(alquemista);
        em.persist(brida);
        em.persist(valkirias);
        em.persist(maao);

        Livro capitaes = geraLivro("978-8-50-831169-1", "Capitaes da Areia",
                "01/01/1937", 6.90, amado);
        Livro flor = geraLivro("978-8-53-592569-9",
                "Dona Flor e Seus Dois Maridos", "01/01/1966", 18.90, amado);

        em.persist(capitaes);
        em.persist(flor);

        em.getTransaction().commit();
        em.close();

    }

    private static Autor geraAutor(String nome) {
        Autor autor = new Autor();
        autor.setNome(nome);
        return autor;
    }

    private static Livro geraLivro(String isbn, String titulo, String data,
            double preco, Autor autor) {
        Livro livro = new Livro();
        livro.setIsbn(isbn);
        livro.setTitulo(titulo);
        livro.setDataLancamento(data);
        livro.setPreco(preco);
        livro.adicionaAutor(autor);
        return livro;
    }

    @SuppressWarnings("unused")
    private static Calendar parseData(String data) {
        try {
            Date date = new SimpleDateFormat("dd/MM/yyyy").parse(data);
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(date);
            return calendar;
        } catch (ParseException e) {
            throw new IllegalArgumentException(e);
        }
    }

}
package br.com.caelum.livraria.modelo;

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

@Entity
public class Autor {

    @Id
    @GeneratedValue
    private Integer id;
    private String nome;

    public String getNome() {
        return nome;
    }

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

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

}

Tem alguma coisa de errado na classe PopulaBanco ?

6 respostas
solução!
<property name="hbm2ddl.auto" value="create"/>
//ou
<property name="hbm2ddl.auto" value="update/>

no persistence.xml

?????

editei a resposta e consertei , não sei pq não "apareceu"

muito obrigado, funcionou. achei estranho pois nos outros cursos eu estava usando o hbm2ddl.auto como update e ele estava criando as tabelas que não existiam. Não sei porque nesse projeto tive que usar o create.

Se não me engano, existe o valor " create-update", faz o teste

não funcionou amigo, dei uma pesquisada acho que só existem esses:

validate: validate the schema, makes no changes to the database.
update: update the schema.
create: creates the schema, destroying previous data.
create-drop: drop the schema when the SessionFactory is closed explicitly, typically when the application is stopped.

tive que deixar o create e depois no update.