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.