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]
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
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
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
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.