Validação campo Unique / capturar exception

Pessoal, como voces validam quando o campo é unique?

Eu to apanhando na questão da edição…

Pra adicionar um nome “José” por exemplo, eu verifico se já existe, se nao existir salva, senão mando uma FacesMessages…tranquilo!!!

Mas e pra editar? Supondo que eu tenha um cliente chamado “José” já cadastrado, e tente alterar o cliente “Maria” para “José”?

Eu tentei enviar uma FacesMessages caso caia na excessão, mas dá pau mesmo assim. Exemplo:

[code]public void buscarNome() {
query = entityManager.createQuery("" +
"select c from Cliente c " +
“where c.nome = :nome”)
.setParameter(“nome”, cliente.getNome());
}

public String salvarCliente() {
buscarNome();
// se cliente não existir (insert)
if (cliente.getClienteId() == null) {
// se existir cliente com o nome digitado
if(query.getResultList().size() == 0) {
entityManager.persist(cliente);
} else {
FacesMessages.instance().add(“Já existe um Cliente com o nome #{cliente.nome}.”);
return null;
}
// se cliente já existir (update)
} else {
try {
entityManager.merge(cliente);
} catch (ConstraintViolationException c) {
FacesMessages.instance().add(“Já existe um Cliente com o nome #{cliente.nome}.”);
return null;
}
}
listarClientes();
return “salvarCliente”;
}[/code]

Lembrando que não quero fazer nenhum validador incrementado :slight_smile:

Abraços!!

Pessoal, se alguém puder tirar minhas dúvidas, gostaria de saber como capturar uma exception, tipo mudei isso

try { entityManager.merge(cliente); } catch (ConstraintViolationException c) { FacesMessages.instance().add("Já existe um Cliente com o nome #{cliente.nome}."); }
para isso

try { entityManager.merge(cliente); } catch (ConstraintViolationException c) { throw new ConstraintViolationException("ERRO", null, null); }

Não consegui resolver o problema, e queria saber:
1 - Isso será mostrado (quando funcionar :lol: ) na tela para o usuário? Senão, como fazer isso?
2 - Essa é a exception correta para constraint unique?

Valeu!!