To recuperando dados através do Hibernate da seguinte forma:
public List searchAll() throws Exception {
Transaction transaction = this.session.beginTransaction();
List list = null;
try{
list = this.session.createCriteria( Message.class ).list();
transaction.commit();
}catch( Exception e ){
transaction.rollback();
}
return list;
}
Ele me retorna objetos do tipo Message, dentro desse Message tem um objeto chamado Person, esse Person tem o atributo name… eu to querendo exibir a lista de Messages na minha página e exibir o título da mensagem e o nome do autor, mas tá dando essa exception:
org.apache.jasper.JasperException: could not initialize proxy - the owning Session was closed
Q será?
Isso acontece pq qdo vc carrega uma Message os objetos Person nao foram carregados - carregamento preguicoso. Ai, qdo vc tenta pegar o atributo name de Person, o hibernate vai tentar carregar o objeto Person de Message, mas como a sessao jah esta fechada, ai da erro dizendo q a sessao jah estava fechada.
O que vc pode fazer para resolver este problema eh colocar no arquivo de mapeamento de Message o atributo lazy=“false” na relacao com Person (O que nao eh uma boa estrategia).
Por exemplo,
Vc pode fazer isso tbm a partir de um metodo da classe Criteria que eu nao me lembro qgora, da uma olhada na API.
Tem tbm com a interface Query q vc pode colocar mais ou menos assim:
session.createQuery(“from Message m left join fetch m.person”);
eh isso ai! espero ter ajudado!
flw cara!
Valew!
[quote=absolution]
O que vc pode fazer para resolver este problema eh colocar no arquivo de mapeamento de Message o atributo lazy=“false” na relacao com Person (O que nao eh uma boa estrategia…
[/quote]pq não?