Ola, estou recebendo uma NullPointerException ao tentar consultar o produto pelo ID, olhei todo o código e n sei onde está o erro.
public class CadastroDeProduto {
public static void main(String[] args) {
cadastrarProduto();
EntityManager em = JPAUtil.getEntityManager();
ProdutoDao produtoDao = new ProdutoDao(em);
Produto p = produtoDao.buscarPorId(1l);
System.out.println(p.getPreco());
List<Produto> produto = produtoDao.buscarTodos();
produto.forEach(p2 -> System.out.println(p.getNome()));
}
private static void cadastrarProduto() {
Categoria celulares = new Categoria("CELULARES");
EntityManager em = JPAUtil.getEntityManager();
em.getTransaction().begin();
em.persist(celulares);
celulares.setNome("xpto");
em.flush();
em.clear();
celulares = em.merge(celulares);
celulares.setNome("1234");
em.flush();
em.clear();
}
}
package br.com.alura.loja.modelo;
import java.math.BigDecimal;
import java.time.LocalDate;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
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() {
// TODO Auto-generated constructor stub
}
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 class ProdutoDao {
private EntityManager em;
public ProdutoDao(EntityManager em) {
this.em = em;
}
public void cadastrar(Produto produto) {
this.em.persist(produto);
}
public void atualizar(Categoria categoria) {
this.em.merge(categoria);
}
public void remover(Categoria categoria) {
categoria = em.merge(categoria);
this.em.remove(categoria);
}
public Produto buscarPorId(Long id) {
return em.find(Produto.class, id);
}
public List<Produto> buscarTodos(){
String jpql = "SELECT p FROM Produto p";
return em.createQuery(jpql, Produto.class).getResultList();
}
}
Hibernate: create table categorias (id bigint generated by default as identity, nome varchar(255), primary key (id))
Hibernate: create table produtos (id bigint generated by default as identity, dataCadastro date, descricao varchar(255), nome varchar(255), preco decimal(19,2), categoria_id bigint, primary key (id))
Hibernate: alter table produtos add constraint FK8rqw0ljwdaom34jr2t46bjtrn foreign key (categoria_id) references categorias
dez. 19, 2021 3:36:56 PM org.hibernate.engine.transaction.jta.platform.internal.JtaPlatformInitiator initiateService
INFO: HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
Hibernate: insert into categorias (id, nome) values (null, ?)
Hibernate: update categorias set nome=? where id=?
Hibernate: select categoria0_.id as id1_0_0_, categoria0_.nome as nome2_0_0_ from categorias categoria0_ where categoria0_.id=?
Hibernate: update categorias set nome=? where id=?
Hibernate: select produto0_.id as id1_1_0_, produto0_.categoria_id as categori6_1_0_, produto0_.dataCadastro as datacada2_1_0_, produto0_.descricao as descrica3_1_0_, produto0_.nome as nome4_1_0_, produto0_.preco as preco5_1_0_, categoria1_.id as id1_0_1_, categoria1_.nome as nome2_0_1_ from produtos produto0_ left outer join categorias categoria1_ on produto0_.categoria_id=categoria1_.id where produto0_.id=?
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "br.com.alura.loja.modelo.Produto.getPreco()" because "p" is null
at br.com.alura.loja.teste.CadastroDeProduto.main(CadastroDeProduto.java:24)