Problemas com session do Hibernate

Olá, estou com um problema no hibernate 3.

Se deixo a Session aberta, tenho o seguinte erro:

a different object with the same identifier value was already
 associated with the session: [tci.content.beans.conteudo.Tipo#1]

se deixo fechada tenho esse:

failed to lazily initialize a collection of role: tci.content.beans.usuario.Usuario.grupos

Alguém sabe o que pode ser ?

Olá.

Seria possível coloca o trecho de código onde está reportando o erro?

clodoaldoJR

O primeiro problema ocorre quando você faz consultas e o hibernate tenta criar um objeto na memória que é igual a outro, por exemplo, tentar criar dois objetos usuário, onde no banco é o mesmo registro, com o mesmo id. Procure onde você está fazendo um segundo select que retorna dados já disponíveis na memória. O segundo caso é que você tem uma collection lazy. Isso ocorria comigo, quando eu explorava a collection numa jsp, e como naquele momento a session estava fechada, o hibernate “pifa” nessa hora, a minha solução foi chamar o getter dessa collection antes de retornar para a jsp. Tenta isso e retorna se deu certo.

soaresinfo , como fechar um getter de uma colection?

Cara…
eu resolvi esse problema dando um Clear na sessão do hibernate

session.clear();

se ajudar, ta ai!

[b]
Eu tb estava com o mesmo problema para fazer a persistencia eu usei MERGE , ok.
Mais problema era ao fazer o DELETE dava esse erro abaixo:

delete a different object with the same identifier value was already associated with the session:

PROBLEMA RESOLVIDO
[/b]

	public List pesquisarPagamentoHb(PlanoPagamento planoPagamento) throws DAOException {
		Query query = null;
		Session sessions = null;
		List pagamentoList = new ArrayList<PlanoPagamento>();
		if(planoPagamento.getPesquisar() != ""){
			sessions = HbLocator.currentSession();
			try {
				query = sessions.createQuery(
					" FROM PlanoPagamento " +
					" WHERE "+planoPagamento.getFiltro()+" like ? " )
					.setString(0, planoPagamento.getPesquisar()+"%");
				pagamentoList = query.list();       
			} catch (Exception e) {
				e.printStackTrace();
				throw new DAOException("[PagamentoDAOImpl - pesquisarPagamentoHb] " + e.getMessage(), e);
			}
		}
		HbLocator.closeSession(); 
		return  pagamentoList;
		
	}

[quote=Leandro® Combinato][b]
Eu tb estava com o mesmo problema para fazer a persistencia eu usei MERGE , ok.
Mais problema era ao fazer o DELETE dava esse erro abaixo:

delete a different object with the same identifier value was already associated with the session:

PROBLEMA RESOLVIDO
[/b]

	public List pesquisarPagamentoHb(PlanoPagamento planoPagamento) throws DAOException {
		Query query = null;
		Session sessions = null;
		List pagamentoList = new ArrayList<PlanoPagamento>();
		if(planoPagamento.getPesquisar() != ""){
			sessions = HbLocator.currentSession();
			try {
				query = sessions.createQuery(
					" FROM PlanoPagamento " +
					" WHERE "+planoPagamento.getFiltro()+" like ? " )
					.setString(0, planoPagamento.getPesquisar()+"%");
				pagamentoList = query.list();       
			} catch (Exception e) {
				e.printStackTrace();
				throw new DAOException("[PagamentoDAOImpl - pesquisarPagamentoHb] " + e.getMessage(), e);
			}
		}
		HbLocator.closeSession(); 
		return  pagamentoList;
		
	}

[/quote]

Cara para deletar usa:

session.refresh(obj); session.delete(obj);

Sem que é antigo esse post. Mas acho que ele deveria ser marcado como resolvido. Para mim, a solução dada por fbl.lucas funcionou :wink: