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 