Ola,
Estava tendo dificuldades pra validar o email com unique constrait. Usando Spring-Data JPA, pq a exception disparada nao funciona para usar no bloco try/catch. Entao resolvi fazer um validador. O validador funciona, porem quando vai editar a entidade, ele tambem valida o email. Nesse caso fiz a solucao dessa maneira, porem gostaria de saber se essa é a forma certa. Se tem uma forma mais elegante. Eu fiz a validacao dessa forma para o campo na view ficar destacado, mas poderia disparar um NegocioException tambem, mas qual a melhor maneira?
public void validarEmail(FacesContext context, UIComponent toValidate, Object value) {
Integer idUsuario = null;
UIComponent pai = toValidate.getParent();
for (UIComponent input : pai.getChildren()) {
if (input.getId().equals("idUsuario")) {
idUsuario = (Integer) ((UIInput) input).getValue();
}
}
String email = (String) value;
Usuario validaUsuario = usuarioService.findByEmail(email);
if (validaUsuario != null && idUsuario==null) {
((UIInput) toValidate).setValid(false);
FacesUtil.adicionarMensagemErro("Ja existe usuário cadastrado com esse email.", null);
}
}