@Transactional(readOnly = true)
  public void validateIgnoringIdAndPessoa(Usuario usuario) {
    if (usuario == null) {
      throw new HttpException(EXCEPTION_USUARIO_MUST_NOT_BE_NULL, HttpStatus.NOT_ACCEPTABLE);
    }

    if (usuario.getStatus() == null) {
      throw new HttpException(EXCEPTION_USUARIO_STATUS_MUST_NOT_BE_NULL, HttpStatus.NOT_ACCEPTABLE);
    }

    if (StringHelper.isBlank(usuario.getApelido())) {
      throw new HttpException(
          EXCEPTION_USUARIO_APELIDO_MUST_NOT_BE_EMPTY, HttpStatus.NOT_ACCEPTABLE);
    }

    if (usuario.getApelido().length() > 45) {
      throw new HttpException(
          EXCEPTION_USUARIO_APELIDO_MUST_NOT_BE_BIGGER_THAN_45_CHARACTERS,
          HttpStatus.NOT_ACCEPTABLE);
    }

    if (!usuario.getApelido().matches(Constants.TEXT_PATTERN_APELIDO)) {
      throw new HttpException(
          EXCEPTION_USUARIO_APELIDO_MUST_CONTAINS_ONLY_LETTERS_NUMBERS_UNDERLINES_DASHES_AND_POINTS,
          HttpStatus.NOT_ACCEPTABLE);
    }

    validateSenha(usuario.getSenha());

    if (usuario.getPerfis() != null) {
      for (int i = 0; i < usuario.getPerfis().size(); i++) {
        for (int j = 0; j < usuario.getPerfis().size(); j++) {
          if (j != i) {
            if (usuario.getPerfis().get(i) == usuario.getPerfis().get(j)) {
              throw new HttpException(
                  EXCEPTION_USUARIO_MUST_NOT_CONTAINS_DUPLICATED_PERFIS, HttpStatus.NOT_ACCEPTABLE);
            }
          }
        }
      }
    }
  }
  public boolean isInPerfis(Usuario usuario, Usuario.Perfil... perfis) {
    for (Usuario.Perfil usuarioPerfil : perfis) {
      for (Usuario.Perfil perfil : usuario.getPerfis()) {
        if (usuarioPerfil == perfil) {
          return true;
        }
      }
    }

    return false;
  }
  public static boolean hasPerfil(Usuario usuario, Usuario.Perfil perfil) {
    // null safe for jsp :-)
    if (usuario != null) {
      for (Usuario.Perfil usuarioPerfil : usuario.getPerfis()) {
        if (usuarioPerfil == perfil) {
          return true;
        }
      }
    }

    return false;
  }