3
respostas

Entidade em tempo de execução:

O cenário é o seguinte. Tenho um sistema que administra uma livraria. Onde estou com dificuldades de carregar os livros do cliente.

O relacionamentos foram desenhados da seguinte forma

Classe cliente: @OneToMany(mappedBy = "cliente", fetch=FetchType.EAGER) private List compras;

Classe Compra: @ManyToMany(fetch=FetchType.EAGER) @JoinTable ( name = "COMPRAS_LIVROS", joinColumns = { @JoinColumn(name = "COMPRA_ID") }, inverseJoinColumns = { @JoinColumn(name = "LIVRO_ID") } ) private List livros;

Para facilitar o desenvolvimento criei dentro da Classe Cliente um atributo livros, onde quero que seja carregado todos os livros já comprados por aquele cliente.

Classe Cliente: @Transient private List livros;

public List<Livro> getLivros() {
    for (Compra compra : this.getCompras()) {
        for (Livro livro : compra.getLivros()) {
            this.livros.add(livro);
        }
    }
    return this.livros;
}

Porém ao chamar o getLivros() e tentar imprimir os livros recebo um nullPointExce.

em.getTransaction().begin();

    Cliente oldCliente1 = em.find(Cliente.class, 3);
    em.getTransaction().commit();
    em.close();

    /*Dessa forma não funciona
    List<Livro> livrosCliente = oldCliente1.getLivros();

    for (Livro livro : livrosCliente) {
        System.out.println(livro);
    }
    */

    /*Dessa forma funciona
    List<Compra> comprasCliente = oldCliente1.getCompras();

    for (Compra compra : comprasCliente) {
        List<Livro> livrosCompra = compra.getLivros();
        for (Livro livro : livrosCompra) {
            System.out.println(livro);
        }
    }
    */

Queria entender o porque desse comportamento.

3 respostas

Boa tarde , isso significa que não tem nada dentro do objeto livro o NullPointerException e referente a isso.

faça um teste assim :

if(livrosCliente != null) { for (Livro livro : livrosCliente) { System.out.println("NÃO E NULO"); }

else ( System.out.println("NULO");

}

OU

if(livrosCliente .size()>=0) { for (Livro livro : livrosCliente) { System.out.println("NÃO E NULO"); }

else ( System.out.println("NULO"); }

Isso eu entendi kkk. A minha duvida é o pq desse comportamento se da outra forma funciona.

Ai e um mistério kkkkkk vou testar por curiosidade