Após executar todos os comandos da aula, meu código está compilando mas estou com essa exception... Alguém pode me ajudar a entender e resolver isso?
Exception in thread "main" javax.persistence.NoResultException: No entity found for query
at org.hibernate.query.internal.AbstractProducedQuery.getSingleResult(AbstractProducedQuery.java:1643)
at br.com.alura.loja.dao.ProdutoDao.buscarPrecoDoProdutoComNome(ProdutoDao.java:68)
at br.com.alura.loja.testes.CadastroDeProdutos.main(CadastroDeProdutos.java:29)
CadastroDeProdutos:
public class CadastroDeProdutos {
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> todos = produtoDao.buscarPorNomeDaCategoria("CELULARES");
todos.forEach(p2 -> System.out.println(p2.getNome()));
BigDecimal precoDoProduto = produtoDao.buscarPrecoDoProdutoComNome("Xiaomi Redmi");
System.out.println("Preco do Produto: " + precoDoProduto);
}
private static void cadastrarProduto() {
Categoria celulares = new Categoria("CELULARES");
Produto celular = new Produto("Xiomi Redmi", "Muito legal", 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();
}
}
ProdutoDao:
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(Produto produto) {
this.em.merge(produto);
}
public void remover(Produto produto) {
produto = em.merge(produto);
this.em.remove(produto);
}
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();
}
public List<Produto> buscarPorNome(String nome) {
String jpql = "SELECT p FROM Produto p WHERE p.nome = :nome";
return em.createQuery(jpql, Produto.class)
.setParameter("nome", nome)
.getResultList();
}
public List<Produto> buscarPorNomeDaCategoria(String nome) { //busca filtro por categoria/relacionamento
String jpql = "SELECT p FROM Produto p WHERE p.categoria.nome = :nome";
return em.createQuery(jpql, Produto.class)
.setParameter("nome", nome)
.getResultList();
}
public BigDecimal buscarPrecoDoProdutoComNome(String nome) {
String jpql = "SELECT p.preco FROM Produto p WHERE p.nome = :nome";
return em.createQuery(jpql, BigDecimal.class)
.setParameter("nome", nome)
.getSingleResult();
}
}
CategoriaDao:
public class CategoriaDao {
private EntityManager em;
public CategoriaDao(EntityManager em) {
this.em = em;
}
public void cadastrar(Categoria categoria) {
this.em.persist(categoria);
}
public void atualizar(Categoria categoria) {
this.em.merge(categoria);
}
public void remover(Categoria categoria) {
categoria = em.merge(categoria);
this.em.remove(categoria);
}
}
Obrigada :')