Dúvidas ao gravar dados com Hibernate

Oi gente, tenho uma aplicação com Hibernate e JSF 2, não uso os famosos DAOs(pois quando comecei, consegui usar apenas em aplicações desktops, mas na minha aplicação web nao consegui fazer funcionar.

tenho a seguinte duvida:

Tenho uma classe Pessoas mapeada pelo hibernate, ao mandar gravar um registro uso o seguinte codigo

            public void gravar() {
            try {

            private Session sessao = CriadorDeSessaoNovo.getSession();
            private Transaction tx = sessao.beginTransaction();
            Estado obj_estado = new Estado();
            obj_estado.setEst_id(est_id);

            Cidade obj_cidade = new Cidade();
            obj_cidade.setCid_id(getCid_id());

            Pessoas obj_pes = new Pessoas();

            if (getPes_id() != 0) {
                obj_pes.setPes_id(pes_id);
            }
            
            obj_pes.setPes_bairro(AlteraLetras.retornaFrase(pes_bairro));
            
            obj_pes.setPes_complemento((pes_complemento));
                        
            obj_pes.setPes_data_nascimento(pes_data_nascimento);

            obj_pes.setPes_email_pessoal(pes_email_pessoal);


            
                obj_pes.setPes_logradouro(AlteraLetras.retornaFrase(pes_logradouro));
            

            
                obj_pes.setPes_prenome(AlteraLetras.retornaFrase(pes_prenome));
            
            
                obj_pes.setPes_nome_meio(AlteraLetras.retornaFrase(pes_nome_meio));
            
            
                obj_pes.setPes_sobrenome(AlteraLetras.retornaFrase(pes_sobrenome));
            
            
                obj_pes.setPes_nom_completo((pes_prenome + " " + pes_nome_meio + " " + pes_sobrenome));

                obj_pes.setPes_nome_italiano(pes_nome_italiano);

            if (!getPes_nome_pais_origem().equals("")) {
                obj_pes.setPes_nome_pais_origem(AlteraLetras.retornaFrase(pes_nome_pais_origem));
            }
            

            if(getPes_numero()!=0){
                obj_pes.setPes_numero(pes_numero);
            }
           
                obj_pes.setPes_rg_num(pes_rg_num);
            
                obj_pes.setPes_rg_expedidor((pes_rg_expedidor));
           
            obj_pes.setPes_rg_dat(pes_rg_dat);

            if(getPes_cpf() !=0){
                obj_pes.setPes_cpf(pes_cpf);
            }
            if(getPes_cep()!=0){
                obj_pes.setPes_cep(pes_cep);
            }
            if(getPes_telefone1()!=0){
                obj_pes.setPes_telefone1(pes_telefone1);
            }
            if(getPes_telefone2()!=0){
                obj_pes.setPes_telefone2(pes_telefone2);
            }
            if(getPes_telefone3()!=0){
                obj_pes.setPes_telefone3(pes_telefone3);
            }

            obj_pes.setEstado(obj_estado);
            obj_pes.setCidade(obj_cidade);

            sessao.saveOrUpdate(obj_pes);
            tx.commit();
            sessao.close();

O meu problema pode ser visto melhor neste trecho de codigo

if(getPes_cpf() !=0){
    obj_pes.setPes_cpf(pes_cpf);
}

if (!getPes_nome_pais_origem().equals("")) {
    obj_pes.setPes_nome_pais_origem(AlteraLetras.retornaFrase(pes_nome_pais_origem));
}

tenho que verificar se o inteiro é igual a zero OU se a string é igual a “”, caso não passe no IF o registro não é setado,
caso eu tente fazer isso diretamente sem o if, ou seja

    obj_pes.setPes_cpf(pes_cpf);

Ele seta o valor como 0 e não nulo, o mesmo acontece com o String, sei que tipos primitivos não podem ser nulos no caso do ‘int’, e por isso uso ‘Integer’, mas tenho que fazer esse if senão meu banco não é preenchido com null.

Alguém sabe como posso driblar isso?

T+