Lista com registros de uma tabela de ligação

Gente!
Eu tenho uma tabela ProdEst (id_prod e id_estacao). Criei uma função (que segundo meu teste está dando certinho) que, ao se passar como parâmetro o id_prod…me retorna todas as ocorrências de id_estacao para este id_prod. Utilizo o Hibernate.

//este método está dentro de uma classe ProdEstDAO.java
public java.util.List filtra_prod(int id_prod) {
java.util.List list_produto_est = null;

try{
       
    Session sessao = HibernateUtil.currentSession();
  
    Transaction transacao = sessao.beginTransaction();         

    Produto pp = (Produto)sessao.get(Produto.class,id_prod);

    Iterator ite = pp.getestacoes().iterator();

     while(ite.hasNext()){
    
       Estacao est= (Estacao) ite.next();
      
       list_produto_est.add(est);
    }

 transacao.commit();
 sessao.close();

}catch(Exception ex) {
    ex.printStackTrace();
    return null;
    
}
   return list_produto_est;
    
} 

Esta lista contém os registros do BD que eu quero. Agora como eu faço para exibir o conteúdo dela? O id_prod vai ser o parametro que eu passei mesmo…mas e o id_estacao, como faço para exibir? sendo que eu não get/ser para minha tabela de ligação ProdEst.

Tentei rodar o código abaixo para teste, compilou certinho:

ProdEstDAO ProdEstDAO = new ProdEstDAO();
List lista = new ArrayList();
lista = ProdEstDAO.filtra_prod(1001);

   for (int x=0; x<lista.size(); x++)
            {  
              Estacao est = (Estacao)lista.iterator().next();

              System.out.println(est.getId_estacao());
              System.out.print("1001");
              System.out.print(x);
              System.out.println(lista.get(x));
            
   }

olhe a mensagem que dá ao rodar:

log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
log4j:WARN Please initialize the log4j system properly.
java.lang.NullPointerException
at inpe.dsa.bdi.dao.ProdEstDAO.filtra_prod(ProdEstDAO.java:135)
at inpe.dsa.bdi.vo.teste.main(teste.java:47)
Exception in thread “main” java.lang.NullPointerException
at inpe.dsa.bdi.vo.teste.main(teste.java:49)
Java Result: 1
BUILD SUCCESSFUL (total time: 2 seconds)

PQ NAO IMPRIMIU O CONTEÚDO DOS MEUS SYSTEM.OUT ?
Qual a melhor forma de eu exibir as ocorrencias de estacao para este prod? O Jaireilton me deu um exemplo legal, mas vindo de uma LISTA, como eu estou usando, não estou sabendo empregar…

VALEU

Corrigindo algumas coisinhas:

[code]public List filtra_prod(int id_prod) {
try{
Session sessao = HibernateUtil.currentSession();
Transaction transacao = sessao.beginTransaction();

  Produto pp = (Produto)sessao.get(Produto.class,id_prod);
 
  transacao.commit();
  sessao.close();
  return pp.getEstacoes();

}catch(Exception ex) {
ex.printStackTrace();
return null;
}
}[/code]

[code]ProdEstDAO ProdEstDAO = new ProdEstDAO();
List lista = ProdEstDAO.filtra_prod(1001);

Iterator ite = lista.iterator();

while(ite.hasNext(){
Estacao est = (Estacao) ite.next();

System.out.println(est.getId_estacao());
System.out.print("1001");
}[/code]

veja se ajuda…

Fiz exatamente o que vc falou: somente alterando o meu dao para Set ao inves de List, já que pp.getestacoes() vai retornar um Set.

O erro agora mudou qdo eu testo…olhe:

init:
deps-module-jar:
deps-ear-jar:
deps-jar:
compile-single:
run-main:
log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
log4j:WARN Please initialize the log4j system properly.
Exception in thread “main” org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: inpe.dsa.bdi.vo.Produto.estacoes, no session or session was closed
at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:358)
at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationExceptionIfNotConnected(AbstractPersistentCollection.java:350)
at org.hibernate.collection.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:343)
at org.hibernate.collection.AbstractPersistentCollection.read(AbstractPersistentCollection.java:86)
at org.hibernate.collection.PersistentSet.iterator(PersistentSet.java:138)
at inpe.dsa.bdi.vo.teste.main(teste.java:83)
Java Result: 1
BUILD SUCCESSFUL (total time: 2 seconds)

Ele diz sucesso mas continua nao me exibindo o valor dos System.out

Ressalto: Quando rodo sem chamar o DAO ( o código do DAO eu coloco neste main de teste), dá certinho. Mas eu necessito utilizar o DAO, eu[b] tenho que resgatar a lista (o set) de um objeto DAO (dao.filtra_prod())…

O problema é que sua coleção está mapeada como lazy instantiation, isso faz com que o Hibernate não busque os elementos da coleção imediatamente, mas quando você tentar acessar a coleção, o problema é que quando você tenta acessar a coleção, a sessão já está fechada…

A solução seria tirar esse lazy instantiation do mapeamento…

Dê uma olhada no mapeamento da coleção “estacoes”, veja se tem um lazy=“true” lá, e coloque false…

OK! Deu certo! Mas o meu lazy já estava false…o problema era no DAO…o sessao.close() estava antes do return, pq o return tinha q estar fora do try. Eu armazenei pp.getestacoes() em uma variavel Set antes do close…e assim dei o return desta variavel Set…!
valeu…
agora vou passar isto pra JSP
qq dúvida eu posto pra encher o seu saco de novo…rssrrsrs
até