JasperException, Hibernate

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?