Illegal attempt to associate a collection with two open sessions

2 respostas
P

Pessoal,

O hibernate está levantando este erro. E eu não tenho a menor idéia o porque. Já verifiquei meu código diversas vezes e creio que eu não estou com duas sessões abertas. Vale salientar que este código está funcionando normalmente para classes que não tenham collections mapeadas. O código chamado que dá o erro é:
private void enviarNaoIntegrados(PrintWriter out,
			String descricaoHistorico, String siglaUnidade) {

		Collection historicos = repositorioIntegracao
				.recuperarNaoIntegrados(descricaoHistorico);
		if (historicos.size() > 0) {
			out.println("<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Enviando "
					+ historicos.size() + " " + descricaoHistorico + "<br>");
			out.flush();
		}
		int i = 1;
		for (Iterator iteratorHistorico = historicos.iterator(); iteratorHistorico
				.hasNext();) {
			out.println("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Enviando " + i++
					+ " de " + historicos.size() + " " + descricaoHistorico
					+ ".......");
			out.flush();
			Historico historico = (Historico) iteratorHistorico.next();
			long codigo = historico.getCodigo();
			historico.setSiglaUnidadeIntegracao(siglaUnidade);
			salvarNaBaseRemota(historico);
			historico.setCodigo(codigo);
			historico.setIntegrado(true);
			out.println("Concluído!<br>");
			out.flush();
		}
		repositorioIntegracao.atualizarIntegrado();

	}

public Collection recuperarNaoIntegrados(String descricaoHistorico) {

		HibernateUtil.closeSession();
		Session session = HibernateUtil.getCurrentSession();
		Transaction transaction = session.beginTransaction();
		System.out.println("Consulta LOCAL!");
		Collection historicos = session.createQuery(
				"from " + descricaoHistorico
						+ " where integrado = false order by dataAtualizacao")
				.list();
		transaction.commit();
		return historicos;

	}

	public void salvarNaBaseRemota(Object objeto) {

		HibernateUtilIntegracao.closeSession();
		Session session = HibernateUtilIntegracao.getCurrentSession();
		Transaction transaction = session.beginTransaction();
		session.save(objeto);
		session.flush();
		transaction.commit();
		HibernateUtilIntegracao.closeSession();
	}

Alguém pode dar uma luz aí?

Agradeço,
Petrus Bastos.

2 Respostas

Alexandre_Vilas_Boas

esse erro pode acontecer quando vc recupera os dados do banco com uma sessao e nao fecha a mesma, posteriormente vc solicita outra sessao do hibernate e tenta gravar no banco

a primeira instruçao dos metodos recuperarNaoIntegrados e salvarNaBaseRemota pedem pra fechar a sessao, isso nao deveria ser a última instrução dos métodos?

no método salvarNaBaseRemota vc fecha a sessao na última instrução. mas quando recupera não.

P

É verdade. Porém, consegui descobrir o problema… e realmente tinha duas sessões abertas… uma através do HibernateUtil e outra através do HibernateUtilIntegracao. :frowning:

Por isso estava dando este erro.

Obrigado a todos pela atenção.

Criado 31 de janeiro de 2007
Ultima resposta 1 de fev. de 2007
Respostas 2
Participantes 2