Problema com OpenSessionInView

Olá…

Estou usando OpenSessionInView e ele está resolvendo quase todos os problemas com Lazy Initialization Exception.

Exceto em um caso, quando pagino o resultado de uma busca.

Situação:

Quando efetuo a busca obtenho resultado ok com todas coleções que estão definidas como lazy obtidas atraves OSIV

quando uso a paginacao do richfaces (rich:datascroller), tento acessar a segunda pagina do resultado da busca a Lazy Initialization Exception é disparada, pois a sessão ja está fechada, sendo assim OSIV nao consegue obter as coleções lazy

Alguem faz ideia de como posso resolver este problema?

se tiver usando mapeamentos xml adiciona no .hbm.xml dos seus Beans em cada uma das collection o atributo lazy=“false” vai dar uma carga extra na sua aplicação mas não vai dar erro.

ou ideia é na camada DAO, no metodo por exemplo getWithCollection()

vc faz um JOIN que não tera problemas


String hql = "select o from Objeto o join Objeto2 o2 ON (o.cod2 = o2.cod)";

lembre-se de adicionar o select pois se não for selecionado ele retornará um HashMap.

[]'s

estou com problemas de performace lazy=false, aumenta meu problema =/

no caso do join, é melhor que o lazy=false, no entanto, nao me agrado mt.

pois tenho varias consultas como essa:

public List<AnuncioVeiculo> retrieveByTipo(String tipo) {
		Criteria criteria = getSession(false).createCriteria(getClasse());
		criteria.add(Restrictions.eq("estado",AnuncioEstado.NO_AR));
		criteria.createCriteria("produto").add(Restrictions.eq("tipo", tipo));
		criteria.setMaxResults(100);
		return criteria.list();
	}

e se eu utilizar join terei que adicionar nesses metodos o FetchMode.JOIN, ficando o metodo assim: [ficando algo parecendo um lazy=false]

public List<AnuncioVeiculo> retrieveByTipo(String tipo) {
		Criteria criteria = getSession(false).createCriteria(getClasse());
		criteria.add(Restrictions.eq("estado",AnuncioEstado.NO_AR));
		criteria.createCriteria("produto").add(Restrictions.eq("tipo", tipo));
		criteria.setMaxResults(100);
		criteria.setFetchMode("produto", FetchMode.JOIN);
		criteria.setFetchMode("produto.modelo", FetchMode.JOIN);
		criteria.setFetchMode("produto.modelo.fabricante", FetchMode.JOIN);
		criteria.setFetchMode("fotos", FetchMode.JOIN);
		criteria.setFetchMode("contato", FetchMode.JOIN);
		criteria.setFetchMode("contato.telefones", FetchMode.JOIN);
		criteria.setFetchMode("anunciante", FetchMode.JOIN);
		return criteria.list();
	}

onde estarei carregando os objetos desnecessariamentes, pois como pagino o resultado em 10 e 10.
com o join carregarei logo os 100 objetos, ja com o OSIV vou carregando a medida que o usuário for avançado.

O que eu gostaria mesmo de saber, é se tem como OSIV manter a sessão aberta em algumas paginas espeficicas, no caso, as de resultado de busca!

Att. Dirceu