| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/06/2006 11:51:09
|
tralala
JavaBaby
Membro desde: 31/03/2006 17:31:53
Mensagens: 91
Offline
|
Como é do conhecimento de todos, essa exceção é lançada quando vc
tentar associar 2 instancias da mesma classe e com a mesma PK em uma
mesma Session.
Eu estou utilizando Struts + Hibernate, e utilizando um FilterServlet que abre
e fecha uma Session pra todas as requisições seguindo o OSIV.
O código que esta causando o erro é:
A lançada quando é executado o commit é:
org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [com.interativati.sigv.cliente.ClienteConcorrente#1]
Bom se no momento que o JSP termina de ser renderizado o FilterServlet fecha a Session, quando o formulário solicita a execução dessa Action está Session não possui nenhum objeto associado a ela, contúdo só existiria um objeto clienteConcorrente associado a ela.
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/07/2006 09:37:17
|
tralala
JavaBaby
Membro desde: 31/03/2006 17:31:53
Mensagens: 91
Offline
|
someone please
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/07/2006 16:51:37
|
the_negao
JavaChild
![[Avatar]](/images/avatar/747c1bcceb6109a4ef936bc70cfe67de.png)
Membro desde: 06/01/2005 01:58:58
Mensagens: 119
Localização: Feira de Santana - BA
Offline
|
Pessoal,
Também estou tendo esse erro, mas quando eu faço um UPDATE.
Utilizando Struts + Hibernate + javax.servlet.Filter + MySQL.
O parte do código que indica o erro é:
Toda ajuda é bem vinda!
Agradeço...
|
® Sérgio Souza ®
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/07/2006 18:50:53
|
tralala
JavaBaby
Membro desde: 31/03/2006 17:31:53
Mensagens: 91
Offline
|
Sergio,
No seu caso é o seguinte:
Se vc esta tentando dar um update, vc teve de fazer um load() ou get() para o Hibernate fazer o retrieve. Quando executa um save()/update() ele tenta associar o objeto a HS, e certamente este mesmo objeto ou outro com a mesma PK ja esta associada a HS.
exemplificando:
como deve estar:
-> get() objeto
-> inicia transacao
-> altera objeto
-> update() // ERRADO, pq o como a sessao não foi fechada ela ja esta associado, e não precisa de update().
-> manda commitar
correto:
-> get() objeto
-> inicia transacao
-> altera objeto
-> manda commitar
se vc fecha a sessão seria:
-> get() objeto
-> fecha sessao
-> altera objeto
-> inicia transacao
-> update() objeto // isso vai re-associalo a Sessão, nesse caso esta correto pq como sessao foi fechada, não existe outro associado
-> manda commitar
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/07/2006 20:32:54
|
the_negao
JavaChild
![[Avatar]](/images/avatar/747c1bcceb6109a4ef936bc70cfe67de.png)
Membro desde: 06/01/2005 01:58:58
Mensagens: 119
Localização: Feira de Santana - BA
Offline
|
tralala,
Funcionou beleza a sua dica, e bem mais simples do que eu estava implementando!
Como estou usando Filtro, só fiz colocar na Action que dá Update:
O get do objeto Nucleo a ser modificado
Set nos campos a serem modificados e pronto!
O begin e o commit da transação e o close da session é feita pelo Filtro.
Valeu ae pela dica!
|
® Sérgio Souza ®
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/07/2006 21:24:07
|
tralala
JavaBaby
Membro desde: 31/03/2006 17:31:53
Mensagens: 91
Offline
|
nads
agora só falta eu resolver o meu objeto-fantasma huaeuhea
mardito!
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/07/2006 00:25:44
|
Mauricio Linhares
Moderador
![[Avatar]](/images/avatar/97af07a14cacba681feacf3012730892.jpg)
Membro desde: 09/01/2005 23:28:22
Mensagens: 3717
Localização: João Pessoa, Paraíba - Brasil
Offline
|
O que é que essa linha faz?
|
Meu blog sobre desenvolvimento | My Last.fm | @mauriciojr
Screencast de Introdução a linguagem Objective-C |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/07/2006 09:26:36
|
tralala
JavaBaby
Membro desde: 31/03/2006 17:31:53
Mensagens: 91
Offline
|
Maurício,
Ele percorre o Set clienteConcorrente e remove o objeto passado
via parametro do Set.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/07/2006 00:55:15
|
tralala
JavaBaby
Membro desde: 31/03/2006 17:31:53
Mensagens: 91
Offline
|
resolvido modificando:
this.clienteConcorrente.remove(clienteConcorrente);
para
this.clienteConcorrente.remove(cc);
sem mais!
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/10/2007 14:34:25
|
Karlen
HelloWorld
Membro desde: 01/07/2004 10:56:06
Mensagens: 12
Offline
|
tralala,
estou com o mesmo problema que o seu, porém eu não entendi o método que vc criou: delClienteConcorrente(ClienteConcorrente clienteConcorrente), vc poderia me explicar??
Estou fazendo um método generico então ele está assim:
protected Serializable save(Object obj) throws HibernateEsception{
Transaction t = null;
Session s = null;
try{
s = getSession();
t = beginTransaction(s);
Serializable rtn = save(obj,s);
t.commit();
return rtn;
}catch(HibernateException e){
throw e;
}finally{
closeSession();
}
}
Obrigada, no aguardo
|
|
|
 |
|
|