1
resposta

Limitando dados de uma consulta

Segui a videoaula, porém tive o seguinte erro no último exemplo:

Exception in thread "main" javax.persistence.NonUniqueResultException: query did not return a unique result: 5

Como estamos utilizando o método .getSingleResult(), esperava-se que a consulta fosse limitada em apenas um resultado, e não foi isso que ocorreu. Desta forma, acrescentei um método .setMaxResults(1), o que passou a limitar a consulta em apenas um resultado. Segue a solução abaixo da classe ProdutoDAO :

//...
    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)
                .setMaxResults(1)
                .getSingleResult();
    }

Classe CadastroDeProdutos:

public class CadastroDeProdutos {
    public static void main(String[] args) {        
        EntityManager em = JPAUtil.getEntityManager();
        ProdutoDAO produtoDAO = new ProdutoDAO(em);
        //...
        BigDecimal precoDoProduto = produtoDAO.buscarPrecoDoProdutoComNome("Xiaomi Redmi");
        System.out.println(precoDoProduto);
        }
    }

Log:

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

1 resposta

Olá, Anderson.

Tudo bem?

Parece que você encontrou uma solução para o problema de múltiplos resultados ao usar o método .getSingleResult(). O erro javax.persistence.NonUniqueResultException ocorre justamente porque a consulta retornou mais de um resultado, e o método .getSingleResult() espera apenas um único resultado.

A abordagem que você utilizou, adicionando .setMaxResults(1), é uma solução válida para garantir que a consulta retorne apenas um resultado. Isso evita a exceção e permite que o método funcione corretamente. Muito obrigado por compartilhar essa solução. Parabéns.

Bons estudos!