Na segunda iteração pelo loop, ao chamar getDetalhePgtos, é lançada a exception
[quote]
ERROR [org.hibernate.LazyInitializationException] failed to lazily initialize a collection of role: com.xxx.vo.Pedido.detalhePgtos, no session or session was closed: org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.xxx.vo.Pedido.detalhePgtos, no session or session was closed[/quote]
Mapeamentos na classe Pedido
@OneToMany(fetch = FetchType.EAGER, mappedBy = "pedido")
private List<StatusHistorico> historicos;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "pedido")
private List<ItemPedido> itens;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "pedido")
private List<DetalhePagamento> detalhePgtos;
Na classe DetalhePagamento
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumns({@JoinColumn(name="CODIGO",insertable=false, updatable=false),@JoinColumn(name="PARCEIRO",insertable=false, updatable=false)})
private Pedido pedido;
Loop onde é lançada a exception
[code]
for (Pedido pedido : pedidos) {
for (StatusHistorico historico : pedido.getHistorico()){
…
}
if (pedido.getDetalhePgtos().size() > 0){
for (DetalhePagamento detalhePgto : pedido.getDetalhePgtos()) {
...
}
}[/code]
Método que carrega os pedidos
@Transactional
public List<Pedido> obtemPedidos(HashMap<String, Object> parametros, Boolean carregaDetalhes ) {
Query query = doQuery(parametros);
List<Pedido> pedidos = (List<Pedido>) query.getResultList();
if (carregaDetalhes){
for (Pedido pedido : pedidos) {
pedido .getHistorico();
pedido .getItem();
pedido .getDetalhePgtos();
}
}
return pedidos;
}
Debugando o método obtemPedidos e carregando os detalhes, Historico, Itens e Detalhes são carregados corretos, ao ir para classe Controler, o erro acontece.
Alguém pode ajudar?