Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
16
respostas

Não consigo criar o Produto.

Estou tomando erro na hora de rodar o projeto. Ele nao cria o produto e retorna erro.

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

16 respostas

Olá, Wellington!

Lamento que esteja enfrentando problemas com a criação do Produto. No entanto, sem o texto do erro exibido na imagem que você compartilhou, fica um pouco difícil identificar a causa exata do problema.

De qualquer forma, aqui estão algumas sugestões gerais que podem ajudar:

  1. Verifique se a entidade Produto está corretamente mapeada com as anotações do JPA/Hibernate.
  2. Certifique-se de que a configuração do banco de dados está correta no arquivo persistence.xml (ou qualquer arquivo de configuração que você esteja usando).
  3. Verifique se o banco de dados está acessível e funcionando corretamente.
  4. Se você estiver usando algum tipo de migração de banco de dados (como o Flyway ou o Liquibase), verifique se a migração foi aplicada corretamente.

Lembre-se, essas são apenas sugestões gerais. A causa exata do problema pode variar dependendo do erro específico que você está recebendo.

Espero ter ajudado e bons estudos!

Ali na Exception o erro : Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] Alguma coisa errada pra conectar o Banco. Mas seguindo pelo curso o banco nao seria em memoria? seguindo exatamente o que esta nas aulas não era pra dar erro. É como se a URL do banco h2 estivesse errada

Oi!

O erro indica que o H2 não foi carregado corretametne. Verifica se ele consta nas dependências do projeto (dentro de Maven Dependencies no lado esquerdo do Eclipse)

Consegui identificar o problema na criação do produto. Porem agora estou com outro erro na busca.

Mesmo problema desse post aqui https://cursos.alura.com.br/forum/topico-duvida-sobre-aula-05-consultas-jpql-286958

O usuario alega que "trocou" o banco de dados e resolveu, agora como faz isso, pra quem banco ele trocou? quando eu rodo pra buscar dar o erro de "NULL not allowed for column "ID"; SQL statement:"

Oi!

Manda aqui como ficou o código ad sua classe main e da classe Produto também

Classe CadastroDeProduto

package br.com.alura.loja.testes;

import java.math.BigDecimal;
import javax.persistence.EntityManager;
import br.com.alura.Dao.CategoriaDao;
import br.com.alura.Dao.ProdutoDao;
import br.com.alura.Util.JPAUtil;
import br.com.alura.loja2.modelo.Categoria;
import br.com.alura.loja2.modelo.Produto;

public class CadastroDeProduto {
  public static void main(String[] args) {
    cadastrarProduto();
    Long id = 1l;
    EntityManager em = JPAUtil.getEntityManager();
    ProdutoDao produtoDao = new ProdutoDao(em);

    Produto p = produtoDao.buscarPorId(1l);
    System.out.println(p.getDescricao());

  }

  private static void cadastrarProduto() {
    Categoria celulares = new Categoria("CELULARES");
    Produto celular = new Produto("Motorola g12", "Top de Linha", new BigDecimal("800"), celulares);

    EntityManager em = JPAUtil.getEntityManager();
    ProdutoDao produtoDao = new ProdutoDao(em);
    CategoriaDao categoriaDao = new CategoriaDao(em);

    em.getTransaction().begin();

    categoriaDao.cadastrar(celulares);
    produtoDao.cadastrar(celular);

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

Classe Produto

package br.com.alura.loja2.modelo;

import java.math.BigDecimal;
import java.time.LocalDate;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

@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();

  @ManyToOne
  private Categoria categoria;

  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;
  }



}

Faz um teste, altere o método main para buscar todos os produtos do banco e percorrer:

public static void main(String[] args) {
    cadastrarProduto();
    Long id = 1l;
    EntityManager em = JPAUtil.getEntityManager();
    ProdutoDao produtoDao = new ProdutoDao(em);

    List<Produto> todos = em.createQuery("select p from Produto p", Produto.class).getResultList();
    for (Produto p : todos) {
        System.out.println(p.getId());
        System.out.println(p.getNome());
    }
  }

Continuou dando o mesmo erro na execução "NULL not allowed for column "ID"; SQL statement:"

Essse erro é na hora de cadastrar então e não na listagem.

Mande aqui o seu pom.xml e persistence.xml

Persistence.xml:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.2"
             xmlns="http://xmlns.jcp.org/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd">

    <persistence-unit name="loja2" transaction-type="RESOURCE_LOCAL">
        <properties>
            <property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/>
            <property name="javax.persistence.jdbc.url" value="jdbc:h2:mem:loja"/>
            <property name="javax.persistence.jdbc.user" value="sa"/>
            <property name="javax.persistence.jdbc.password" value=""/>

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

pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>br.com.alura</groupId>
  <artifactId>loja2</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  
  <build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.0</version>
            <configuration>
                <release>11</release>
            </configuration>
        </plugin>
    </plugins>
</build>

<dependencies>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <version>5.4.27.Final</version>
    </dependency>
    
    <!-- https://mvnrepository.com/artifact/com.h2database/h2 -->
<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <version>2.2.224</version>
</dependency>

</dependencies>

  
</project>

no pom.xml a dependência do H2 deveria estar na versão 1.4.200:

<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <version>1.4.200</version>
</dependency>

No seu está a versão 2.2.224 e provavelmente teve mudanças nas novas versões que estão impactando no projeto

Eu troquei pra essa versão porque estava com outro erro, quando eu uso a versão 1.4.200 meio que ele nao encontra EntityManager loja2

fica dando essse erro aqui:

No Persistence provider for EntityManager named loja2

Então tem algo errado no teu projeto.

No projeto do curso funciona tudo certinho com essa versão: https://cursos.alura.com.br/course/persistencia-jpa-introducao-hibernate/task/88939

Professor complicado, deletei tudo que eu havia feito com os videos, e baixei o projeto que me direcionou, porem nao consigo importar no eclipse...

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Você deve importar pela opção Import -> Maven-> Existing Maven Projects

solução!

Funcionou. Obrigado