1
resposta

ERROR: column "categoria" of relation "produtos" does not exist

Olá!

Meu código está praticamente igual ao da aula (exceto por alguns nomes, mas em termos funcionais está), e apareceu esse erro, ele não está conseguindo criar a coluna categoria aparentemente. Estou usando o banco de dados postgresSQL, e até aqui estava funcionando tudo certo.

esse é o meu código:

public class ProdutoDAO {

private EntityManager em;

public ProdutoDAO(EntityManager em) {
    this.em = em;
}

public void cadastrar(Produto produto) {
    this.em.persist(produto);
}

}

public enum Categoria {

CELULARES,
INFORMATICA,
LIVROS;

}

@Entity @Table(name = "produtos") public class Produto {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String nome;
private String descricao;
private BigDecimal preco;
private LocalDate dataCadastro = LocalDate.now();

@Enumerated(EnumType.STRING)
private Categoria categoria;

public Produto () {}

public Produto(String nome, String descricao, BigDecimal preco, Categoria categoria) {
    this.nome = nome;
    this.descricao = descricao;
    this.preco = preco;
    this.categoria = categoria;
}

public Long getId() {
    return id;
}

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

public String getNome() {
    return nome;
}

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

public String getDescricao() {
    return descricao;
}

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

public BigDecimal getPreco() {
    return preco;
}

public void setPreco(BigDecimal preco) {
    this.preco = preco;
}

public LocalDate getDataCadastro() {
    return dataCadastro;
}

public void setDataCadastro(LocalDate dataCadastro) {
    this.dataCadastro = dataCadastro;
}

public Categoria getCategoria() {
    return categoria;
}

public void setCategoria(Categoria categoria) {
    this.categoria = categoria;
}

}

public class CadastroDeProduto {

public static void main(String[] args) {

    Produto celular = new Produto("Xiaomi Redmi", "Muito Legal", new BigDecimal("800"), Categoria.CELULARES);

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

    em.getTransaction().begin();
    dao.cadastrar(celular);
    em.getTransaction().commit();
    em.close();

}

}

public class JPAUtil {

//cria o entitymanager, para garantir que a factory serja criada uma unica vez 
private static final EntityManagerFactory FACTORY = Persistence
        .createEntityManagerFactory("lojaJPA");

public static EntityManager getEntityManager() {
    return FACTORY.createEntityManager();
}

}

<persistence-unit name="lojaJPA" transaction-type="RESOURCE_LOCAL">

    <properties>
        <property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver"/>    
        <property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost:5433/lojaJPA"/>        
        <property name="javax.persistence.jdbc.user" value="postgres"/>
        <property name="javax.persistence.jdbc.password" value="admin"/>

        <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>
        <property name="hibernate.show_sql" value="true"/>
        <property name="hibernate.hbm2ddl.auto" value="update"/>
    </properties>
</persistence-unit>
1 resposta

Olá Anderson!

O erro "ERROR: column "categoria" of relation "produtos" does not exist" indica que a coluna "categoria" não foi criada na tabela "produtos". Verifique se você executou as migrações necessárias para que a tabela seja criada com todas as colunas necessárias.

Outra possibilidade é que a coluna "categoria" tenha sido criada com outro nome. Verifique se o nome da coluna está correto na sua classe Produto e se está igual ao nome da coluna no seu banco de dados.

Espero ter ajudado e bons estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software