Estou tomando erro na hora de rodar o projeto. Ele nao cria o produto e retorna erro.
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!
Estou tomando erro na hora de rodar o projeto. Ele nao cria o produto e retorna erro.
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:
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...
Você deve importar pela opção Import -> Maven-> Existing Maven Projects
Funcionou. Obrigado