Retorno Hibernate

3 respostas
M

Galera, eu estou precisando de ajuda com o inner join do hibernate. Eu consegui fazer ele funcionar, mas não consigo iterar sobre ele para mostrar dentro da minha JSP.

Eu fiz uma classe te teste para ver se ele estava funcionando, e quando coloco para imprimir no terminal ele me retorna os dados. Mas quando eu coloco na sessao para usar na JSP através do <c:foreach ele nao aceita. Nao sei se o erro é na hora de colocar na lista.

a classe te teste é essa:

public static void main(String args[]) {
		Session sessao = HibernateUtility.getSession();
		Transaction tx = sessao.beginTransaction();
		
		// HQL com query no XML
		Query select = sessao.getNamedQuery("buscarUsuarios");
		
		List objetos = select.list();
		
		tx.commit();
		sessao.close();
	
	}

Eu tenho que fazer alguma coisa pra colocar na lista?! Ou entao para iterar sobre essa lista, por ela me retorna a classe Usuarios, Divisoes e Gerencias. Uma Gerencia tem muitas Divisões, e uma Divisão tem muitos Usuarios.

Alguem poderia me ajudar?! Obrigado!>

3 Respostas

Rapapel

Veja na stackTrace se esta dando a seguinte exception : org.hibernate.LazyInitializationException

Caso sim, isso acontece porque você esta tentando acessar uma variável Lazy e a sessão do hibernate ja esta fechada.
Procure na net sobre openSessionInView filter.

Boa sorte.

aneri

Munox

Esta parecendo um erro, relacionado a Lazy, mas póst o erro e o resto do código, para um melhor entendimento.

[]'s

M

O Erro que dá é esse:

2375 [main] DEBUG org.hibernate.hql.ast.ErrorCounter  - throwQueryException() : no errors
2375 [main] DEBUG org.hibernate.hql.ast.QueryTranslatorImpl  - HQL: 
		from br.com.bb.hibernate.Divisoes divisoes left join fetch divisoes.usuarios
	
2375 [main] DEBUG org.hibernate.hql.ast.QueryTranslatorImpl  - SQL: select divisoes0_.idDivisao as idDivisao1_0_, usuarios1_.matricula as matricula0_1_, divisoes0_.divisao as divisao1_0_, divisoes0_.idGerencia as idGerencia1_0_, usuarios1_.nome as nome0_1_, usuarios1_.ramal as ramal0_1_, usuarios1_.senha as senha0_1_, usuarios1_.idDivisao as idDivisao0_1_, usuarios1_.idDivisao as idDivisao0__, usuarios1_.matricula as matricula0__ from Divisoes divisoes0_ left outer join Usuarios usuarios1_ on divisoes0_.idDivisao=usuarios1_.idDivisao
2375 [main] DEBUG org.hibernate.hql.ast.ErrorCounter  - throwQueryException() : no errors
2375 [main] DEBUG org.hibernate.impl.SessionFactoryImpl  - Checking 0 named SQL queries
2453 [main] DEBUG org.hibernate.impl.SessionImpl  - opened session at timestamp: [telefone removido]
2453 [main] DEBUG org.hibernate.transaction.JDBCTransaction  - begin
2453 [main] DEBUG org.hibernate.jdbc.ConnectionManager  - opening JDBC connection
2453 [main] DEBUG org.hibernate.transaction.JDBCTransaction  - current autocommit status: false
2469 [main] DEBUG org.hibernate.jdbc.AbstractBatcher  - about to open PreparedStatement (open PreparedStatements: 0, globally: 0)
2469 [main] DEBUG org.hibernate.SQL  - /* named HQL query buscarUsuarios */ select divisoes0_.idDivisao as idDivisao1_0_, usuarios1_.matricula as matricula0_1_, divisoes0_.divisao as divisao1_0_, divisoes0_.idGerencia as idGerencia1_0_, usuarios1_.nome as nome0_1_, usuarios1_.ramal as ramal0_1_, usuarios1_.senha as senha0_1_, usuarios1_.idDivisao as idDivisao0_1_, usuarios1_.idDivisao as idDivisao0__, usuarios1_.matricula as matricula0__ from Divisoes divisoes0_ left outer join Usuarios usuarios1_ on divisoes0_.idDivisao=usuarios1_.idDivisao
Hibernate: /* named HQL query buscarUsuarios */ select divisoes0_.idDivisao as idDivisao1_0_, usuarios1_.matricula as matricula0_1_, divisoes0_.divisao as divisao1_0_, divisoes0_.idGerencia as idGerencia1_0_, usuarios1_.nome as nome0_1_, usuarios1_.ramal as ramal0_1_, usuarios1_.senha as senha0_1_, usuarios1_.idDivisao as idDivisao0_1_, usuarios1_.idDivisao as idDivisao0__, usuarios1_.matricula as matricula0__ from Divisoes divisoes0_ left outer join Usuarios usuarios1_ on divisoes0_.idDivisao=usuarios1_.idDivisao
Exception in thread "main" java.lang.ClassCastException: br.com.bb.hibernate.Divisoes cannot be cast to br.com.bb.hibernate.Usuarios
	at teste.TesteSelect.main(TesteSelect.java:28)
3125 [main] DEBUG org.hibernate.jdbc.AbstractBatcher  - about to open ResultSet (open ResultSets: 0, globally: 0)
3125 [main] DEBUG org.hibernate.loader.Loader  - result row: EntityKey[br.com.bb.hibernate.Divisoes#1], EntityKey[br.com.bb.hibernate.Usuarios#1]
3141 [main] DEBUG org.hibernate.loader.Loader  - found row of collection: [br.com.bb.hibernate.Divisoes.usuarios#1]
3187 [main] DEBUG org.hibernate.loader.Loader  - result row: EntityKey[br.com.bb.hibernate.Divisoes#1], EntityKey[br.com.bb.hibernate.Usuarios#t1009519]
3187 [main] DEBUG org.hibernate.loader.Loader  - found row of collection: [br.com.bb.hibernate.Divisoes.usuarios#1]
3187 [main] DEBUG org.hibernate.loader.Loader  - result row: EntityKey[br.com.bb.hibernate.Divisoes#2], EntityKey[br.com.bb.hibernate.Usuarios#t1008054]
3187 [main] DEBUG org.hibernate.loader.Loader  - found row of collection: [br.com.bb.hibernate.Divisoes.usuarios#2]
3187 [main] DEBUG org.hibernate.jdbc.AbstractBatcher  - about to close ResultSet (open ResultSets: 1, globally: 1)
3187 [main] DEBUG org.hibernate.jdbc.AbstractBatcher  - about to close PreparedStatement (open PreparedStatements: 1, globally: 1)
3187 [main] DEBUG org.hibernate.engine.TwoPhaseLoad  - resolving associations for [br.com.bb.hibernate.Divisoes#1]
3187 [main] DEBUG org.hibernate.engine.TwoPhaseLoad  - done materializing entity [br.com.bb.hibernate.Divisoes#1]
3203 [main] DEBUG org.hibernate.engine.TwoPhaseLoad  - resolving associations for [br.com.bb.hibernate.Usuarios#1]
3203 [main] DEBUG org.hibernate.engine.TwoPhaseLoad  - done materializing entity [br.com.bb.hibernate.Usuarios#1]
3203 [main] DEBUG org.hibernate.engine.TwoPhaseLoad  - resolving associations for [br.com.bb.hibernate.Usuarios#t1009519]
3203 [main] DEBUG org.hibernate.engine.TwoPhaseLoad  - done materializing entity [br.com.bb.hibernate.Usuarios#t1009519]
3203 [main] DEBUG org.hibernate.engine.TwoPhaseLoad  - resolving associations for [br.com.bb.hibernate.Divisoes#2]
3203 [main] DEBUG org.hibernate.engine.TwoPhaseLoad  - done materializing entity [br.com.bb.hibernate.Divisoes#2]
3203 [main] DEBUG org.hibernate.engine.TwoPhaseLoad  - resolving associations for [br.com.bb.hibernate.Usuarios#t1008054]
3203 [main] DEBUG org.hibernate.engine.TwoPhaseLoad  - done materializing entity [br.com.bb.hibernate.Usuarios#t1008054]
3203 [main] DEBUG org.hibernate.engine.loading.CollectionLoadContext  - 2 collections were found in result set for role: br.com.bb.hibernate.Divisoes.usuarios
3203 [main] DEBUG org.hibernate.engine.loading.CollectionLoadContext  - collection fully initialized: [br.com.bb.hibernate.Divisoes.usuarios#1]
3203 [main] DEBUG org.hibernate.engine.loading.CollectionLoadContext  - collection fully initialized: [br.com.bb.hibernate.Divisoes.usuarios#2]
3203 [main] DEBUG org.hibernate.engine.loading.CollectionLoadContext  - 2 collections initialized for role: br.com.bb.hibernate.Divisoes.usuarios
3203 [main] DEBUG org.hibernate.engine.StatefulPersistenceContext  - initializing non-lazy collections

E aqui o código do metodo main

Session sessao = HibernateUtility.getSession();
		Transaction tx = sessao.beginTransaction();
		// HQL
		// Query select = sessao.createQuery("from Usuarios");
		// HQL com query no XML
		Query select = sessao.getNamedQuery("buscarUsuarios");
		// API Criteria
		// Criteria select = sessao.createCriteria(Usuarios.class);

		List objetos = select.list();
		
		for (Iterator iterator = objetos.iterator(); iterator.hasNext();) {
			Usuarios user = (Usuarios) iterator.next();
			Divisoes div = (Divisoes) iterator.next();
			Gerencias ger = (Gerencias) iterator.next();
	
			
		}

		tx.commit();
		sessao.close();

Realmente nao sei o que estou fazendo de errado!

Criado 23 de setembro de 2008
Ultima resposta 29 de set. de 2008
Respostas 3
Participantes 3