Hibernate e WebWork, Urubatan e demais feras, please! :D

Brother, to tentando excluir um registro usando normalmente meu Hibernate com WebWork.
Não to usando nenhum tipo de sessão, sei lá, é apenas uma lista com um botão excluir, que chama o método abaixo!!
COmo você sugeriu no outro post, configurei um parâmetro para o tipo de um VO meu, e mesmo assim tá dando erro.
Minha classe agora tem 1 parâmetro que é um Bean arquitetura, e eu faço o seguinte lá no meu JSP:

Tranquilo, uma funçãozinha passa o id para o js que manda para o action, mas mesmo assim está me retornando este erro:

[quote]
2004-03-19 17:48:25,546 ERROR codegenerator2.bd.BDGeneric -> net.sf.hibernate.
NonUniqueObjectException: a different object with the same identifier value was
already associated with the session: 11, of class: br.com.ex.codegenerator2
.vo.Arquitetura[/quote]

Como falei, não estou colocando nada na sessão…

Eis meu método:

public String excluiArquitetura(){ try{ bd.delete(arquitetura); return SUCCESS; } catch(Exception e){ log.error(e); this.addActionError("Erro ao excluir atividade:" + e); return ERROR; } }

Galera, to quase desistindo de usar o WebWork por causa deste problema, pois meu chefe está exigindo produtividade, e sinceramente não estou encontrando-a usando WW e Hibernate, infelizmente não estou :frowning:

Alguém pode me ajudar?

Obrigado!

Humm … desiste não, força :lol: !

O GUJ não é sua única fonte, a API é sua amiga!

Hummm pensando bem não entendi bem esse esquema não, posta mais código ae …

nã precisa :slight_smile:

o esquema é o seguinte,
provavelmente tu ta usando uma session do hibernate ja criada antes, onde um objeto com este ID ja foi carregado,
depois tu criou outro objeto da mesma classe, e setou o ID dele, e este é que tu ta passando para o metodo delete

faz o seguinte, em vez de criar outro objeto, da um load e depois deleta, assim tu tem certeza que esta tentando deletar um objeto que existe mesmo, e resolve este problema ai :slight_smile:

Bom, eu não to tentando criar outro objeto não, onde vc viu isso? Não entendi muito bem, mas como eu daria um load nele?

Sorry pela ignorância…

Object objeto = session.load(minhaClasse.class,id);
session.delete(objeto);

isto deve funcionar :slight_smile:

eu sei, que é chato ter que dar um load antes de deletar, mas se tu quer utilizar a mesma session mais de uma vez, é a unica solução :slight_smile:

Nossa, to começando a achar que WW é sux :frowning:

[quote=“urubatan”] Object objeto = session.load(minhaClasse.class,id); session.delete(objeto);

isto deve funcionar :slight_smile:

eu sei, que é chato ter que dar um load antes de deletar, mas se tu quer utilizar a mesma session mais de uma vez, é a unica solução :-)[/quote]
Obrigado cara, funcionou, mas meu olho arde cada vez que eu olho para esta gambiarra :frowning:

Abraço

Você não necessariamente precisa usar essa gambiarra.

E se vc pensar direitinho, não é uma gambiarra: esquece que existe um banco! Vc tem que encontrar o objeto que vc quer deletar, não??

Tudo bem, se vc sabe o id dele, vc pode também deletar com uma query.

De qq forma, seu problema não tem nada a ver com WebWork, e sim com o fato de que vc tá chamando load() duas vezes! Fuça aí na sua Action, e descobre quando foi que vc preencheu essa variável arquitetura pela última vez, e porque vc não tá usando a mesma instância.

Vc tb pode experimentar chamar session.refresh(arquitetura) pra garantir que sua instância tá em sync com o banco.

[]s