Problemas com javax.persistence

Pessoal,

Estou fazendo uma aplicação com JSF + TopLink (JPA), e o meu problema é o seguinte: eu tenho um formulário de cliente, onde antes de inserir os dados eu faço uma consulta por cpf. Caso já exista um cpf igual, ele dispara uma exceção. Caso não exista, ele deixa inserir.

O meu problema é o seguinte, quando já existe um cpf, ele faz a consulta e traz o objeto e não dá erro;

Quando o Cpf não existe, ele dispara uma exceção javax.persistence.NoResultException : getSingle Result() did not retrieve any entities. Sendo que eu trato essa exceção.

Ele não retorna null com esta consulta:
EntityManager em = getEntityManager();
Cliente cliente = (Cliente) em.createQuery("SELECT c FROM Cliente c WHERE c.cpf = "+cpf).getSingleResult();

ele já dá pau direto.
Alguém sabe o que pode estar errado?

Desde já agradeço

Não seria o ideal colocar uma constraint “unique” no banco? Desse jeito que você está tentando fica meio gambiarra… mas vamos lá:

[code]EntityManager em = getEntityManager();
Query query = em.createQuery("SELECT c FROM Cliente c WHERE c.cpf ?1");
query.setParameter(1, cpf);

try{
Cliente cli = (Cliente) query.getSingleResult();
throw new Exception("CPF já cadastrado");
}catch(NoResultException nre){
//inserir
}[/code]

Ou

List lista = query.getResultList(); if(list.isEmpty()){ //inserir }else{ throw new Exception("CPF já cadastrado"); }