@Transactional(readOnly = true)
  public void validateIgnoringId(Usuario usuario) {
    validateIgnoringIdAndPessoa(usuario);

    if (usuario.getPessoa() != null) {
      if (usuario.getPessoa().getPessoaId() == null) {
        throw new HttpException(
            EXCEPTION_USUARIO_PESSOA_PESSOA_ID_MUST_NOT_BE_NULL, HttpStatus.NOT_ACCEPTABLE);
      }

      Pessoa foundPessoa = pessoaService.findOne(usuario.getPessoa().getPessoaId());

      if (foundPessoa == null) {
        throw new HttpException(EXCEPTION_USUARIO_PESSOA_NOT_FOUND, HttpStatus.NOT_ACCEPTABLE);
      }

      usuario.setPessoa(foundPessoa);
    }
  }
  @Transactional(readOnly = true)
  private Specification<Usuario> childrenBelongsToPessoaId(final Long pessoaId) {
    Pessoa pessoa = pessoaService.findOne(pessoaId);

    if (pessoa instanceof Estabelecimento) {
      Estabelecimento pai = null;

      Specifications<Usuario> pessoaIdEqualsSpecifications =
          Specifications.where(pessoaIdEquals(pessoaId));

      while ((pai = pai == null ? ((Estabelecimento) pessoa).getPai() : pai.getPai()) != null) {
        pessoaIdEqualsSpecifications =
            pessoaIdEqualsSpecifications.or(pessoaIdEquals(pai.getPessoaId()));
      }

      return pessoaIdEqualsSpecifications;
    } else {
      return Specifications.where(pessoaIdEquals(pessoaId));
    }
  }