Problemas com NullPointerException em hibernate & struts2

1 resposta
WebX

Boa noite galera!!

Venho aqui pedir uma ajudinha para vocês pois já tentei de tudo um pouco para tentar resolver um NullPointerException.

A questão é a seguinte…tenho um banco de dados mapeado (corretamente, já testei :stuck_out_tongue: ) onde tenho um relacionamento N:N entre as tabelas usuario e perfil onde cria a tabela usuario_perfil que tem apenas as chaves primárias de cada uma. Defini inverse true em perfil, para que somente quando popular em usuario ele persista no banco de dados.

O problema está na hora de popular o objeto perfil.id_tb_perfil no usuario. Vou lhes mostrar o que ocorre.

Temos aqui o código de nosso form:

<s:form method="post"  action="UsuarioSave"  >  
    <h1>Cadastro de Usuario</h1>
    <s:textfield name="usuario.nome" id="Nome" label="Nome"/>
     <s:textfield name="usuario.email" label="Email"/>
     <s:textfield name="usuario.matricula" label="Matricula"/>
     <s:textfield name="usuario.telefone" label="Telefone"/>
     <s:password name="usuario.senha" label="Senha"/>
     <s:action name="lista" namespace="/perfil"  executeResult="false" id="profs"  /> 
     <s:select name="perfil.id_tb_perfil" list="#profs.lista" listValue="perfil" listKey="id_tb_perfil"  ></s:select>
     <s:submit value="Cadastrar" />
     </s:form>

A action deste form me levará ao método insere desta classe:

private Usuario usuario;
    private List lista;
    private Perfil perfil;

/*...*/

       public String insere() {
       Perfil p = new Perfil();
       Perfil p2 = new Perfil();
       p2.setId_tb_perfil(2);
       p = (Perfil) getPerfil();
       System.out.print("O que tamo trazendo eh: "+p.getId_tb_perfil()+" fim \n");
       if(!p.equals(null)){
            usuario.getPerfil().add(p);
       }
       else if(p.equals(null)){
            usuario.getPerfil().add(p2);
       }
        if(new UsuarioDaoImpl().add(usuario)) {
            System.out.println("conseguiu inserir");
            
        } else {
            
            System.out.println("deu um erro doidao");
        }
        return SUCCESS;
        
    }

/*
...
gets e set sets omitidos
*/

Coloquei o if e o else if daquela forma pura e simplesmente para me asegurar que não estou recebendo objetos com valores nulos (para apurar onde está o erro).

A variável Perfil p2 = new Perfil() ilustra o teste que eu fiz para perceber que realmente o código está inserindo… no código contido no else if(p.equals(null)) o objeto é adicionado corretamente ao usuario e persistido no DB.

Minha pergunta é…porque raios que mesmo o objeto p que recebe (e de fato recebe, pois testei no print e ele me imprime o valor correto) o select do form (que me retorna o id da tabela perfil) não estando com valor null e não consegue popular o objeto usuario. Pois é exatamente na parte usuario.getPerfil().add§; que se encontra meu NullPointerException :cry: .

Se alguém puder me dar uma luz aqui seria imensamente grato.

Obrigado :wink:

1 Resposta

WebX

Galera…já resolvi.

Acabei cometendo o mesmo engano que meu amigo Alexandre (alexandre.etf).

Tendo visto como o código se encontra anteriormente, a forma correta de popular o objeto perfil.id_tb_perfil em usuário se dá da seguinte forma:

usuario.setPerfil(new HashSet<Perfil>());
usuario.getPerfil().add(perfil);

Obrigado :wink:

Criado 29 de abril de 2008
Ultima resposta 30 de abr. de 2008
Respostas 1
Participantes 1