Validação campo Unique / capturar exception

1 resposta
S

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:

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  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";		
}

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

Abraços!!

1 Resposta

S

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!!

Criado 16 de março de 2010
Ultima resposta 16 de mar. de 2010
Respostas 1
Participantes 1