| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/01/2012 10:04:31
|
Mickdark
Thread.start()
Membro desde: 17/11/2011 15:42:40
Mensagens: 41
Offline
|
Olá!!
Estou fazendo o mapeamento de uma lista de privilegios, 1 privilegio pode ter varios recurso, enquanto 1 recurso pode ter apenas 1 privilegio, quando eu passo da view para a aplicação ele grava no banco, mas quando eu altero ele faz o update da chave estrangeira para null e faz outro insert com os novos dados!!! Eu queria que ele excluisse do banco ao invés de gerar o update da chave estrangeira, dei uma olhada em dois posts feitos com o mesmo problema mais para a minha aplicaçao não resolveu!! Segue o código!!
Entity Recurso
Entity Privilegio
|
 |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/01/2012 10:47:26
|
Thiago Rodrigues
HelloWorld
Membro desde: 16/06/2008 20:46:25
Mensagens: 10
Offline
|
Mickdark wrote:Olá!!
Estou fazendo o mapeamento de uma lista de privilegios, 1 privilegio pode ter varios recurso, enquanto 1 recurso pode ter apenas 1 privilegio, quando eu passo da view para a aplicação ele grava no banco, mas quando eu altero ele faz o update da chave estrangeira para null e faz outro insert com os novos dados!!! Eu queria que ele excluisse do banco ao invés de gerar o update da chave estrangeira, dei uma olhada em dois posts feitos com o mesmo problema mais para a minha aplicaçao não resolveu!! Segue o código!!
Entity Recurso
Entity Privilegio
Não sei se irá resolver seu problema mas tente tirar o cascade da entidade Recurso
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/01/2012 11:23:13
|
Mickdark
Thread.start()
Membro desde: 17/11/2011 15:42:40
Mensagens: 41
Offline
|
Olá Thiago! Tentei e não deu certo!! Tens mais alguma sugestão?
This message was edited 1 time. Last update was at 18/01/2012 11:29:47
|
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 23/01/2012 14:53:41
|
Thiago Rodrigues
HelloWorld
Membro desde: 16/06/2008 20:46:25
Mensagens: 10
Offline
|
Está usando qual provider? Imagino que isso deve ser configurável, não? Utilizo o Hibernate e nunca passei por esse tipo de situação
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/01/2012 07:39:04
|
Mickdark
Thread.start()
Membro desde: 17/11/2011 15:42:40
Mensagens: 41
Offline
|
Então eu estou utilizando o Hibernate 3.6.8, no entando eu dei uma olhada nas documentações e em alguns foruns e percebi que pra usar um save ou update no hibernate para ele persistir eu tenho que implementar o equals e o HashCode!! Eu implementei o equals, agora o HashCode eu não sei como funciona, por isso estava procurando, e lendo uns tutos para aprender como ele funciona e como implementar esse método!!
|
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/01/2012 08:50:02
|
marciobarroso
Virtual Machine Man
![[Avatar]](/images/avatar/6828f61cee49c7a4da0f9c1d3e03b857.jpg)
Membro desde: 13/05/2005 23:17:13
Mensagens: 508
Localização: Barueri / SP / BR
Offline
|
Se estiver utilizando o Eclipse, ele gera para você. Acho que o netbeans também deve ter algo parecido.
no eclipse, acesse o menu source e generate hashCode() and equals() ...
Segue um exemplo gerado no eclipse:
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/01/2012 12:11:23
|
Tchello
GUJ Master
![[Avatar]](/images/avatar/901db33c84e81b1a30e59949bbcb112b.png)
Membro desde: 07/06/2008 14:41:04
Mensagens: 1695
Offline
|
Ta usando hibernate?
Use a annotation no relacionamento:
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/01/2012 12:59:04
|
Mickdark
Thread.start()
Membro desde: 17/11/2011 15:42:40
Mensagens: 41
Offline
|
marciobarroso wrote:Se estiver utilizando o Eclipse, ele gera para você. Acho que o netbeans também deve ter algo parecido.
no eclipse, acesse o menu source e generate hashCode() and equals() ...
Segue um exemplo gerado no eclipse:
Obrigado Marcio, mas quando eu gerei o código ele está dando uma exception do hibernate, "org.hibernate.LazyInitializationException"
|
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/01/2012 13:02:20
|
Mickdark
Thread.start()
Membro desde: 17/11/2011 15:42:40
Mensagens: 41
Offline
|
Tchello wrote: Ta usando hibernate?
Use a annotation no relacionamento:
Sim sim, eu estou tentando desta maneira depois que me responderam a primeira vez, mas ainda nada, olha o código como está neste momento!!!
|
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/01/2012 14:29:01
|
marciobarroso
Virtual Machine Man
![[Avatar]](/images/avatar/6828f61cee49c7a4da0f9c1d3e03b857.jpg)
Membro desde: 13/05/2005 23:17:13
Mensagens: 508
Localização: Barueri / SP / BR
Offline
|
Você precisa utilizar o FetchType para dizer ao hibernate que sua coleção deve ser inteiramente carregada logo de cara. Se você não configura isso, o hibernate só leva uma referencia dos itens da lista, tendo posteriormente que carregá-los quando for necessário.
Ai, surgem outros problemas ... se você estiver enviando estes pojos para o jsp para renderização, você vai precisar implementar um filtro do tipo OpenSessionInView, para carregar a lista, ou então, carrega a lista antes de enviar para o jsp.
Boa sorte
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/01/2012 14:48:03
|
Mickdark
Thread.start()
Membro desde: 17/11/2011 15:42:40
Mensagens: 41
Offline
|
marciobarroso wrote:Você precisa utilizar o FetchType para dizer ao hibernate que sua coleção deve ser inteiramente carregada logo de cara. Se você não configura isso, o hibernate só leva uma referencia dos itens da lista, tendo posteriormente que carregá-los quando for necessário.
Ai, surgem outros problemas ... se você estiver enviando estes pojos para o jsp para renderização, você vai precisar implementar um filtro do tipo OpenSessionInView, para carregar a lista, ou então, carrega a lista antes de enviar para o jsp.
Boa sorte
É verdade, eu tinha esquecido de colocar o EAGER no fetch, bom, o problema, desse fetch foi resolvido de outra forma, quando o eclipse implementou o HashCode ele colocou a igualdade para todos os campos, mas no meu caso eu queria apenas do nome do privilegio e da empresa, então eu comentei os outros dois campos, e esse erro do FetchTypeLazyException não apareceu mais, agora vou testar se arrumando o HashCode da outra tabela ele exclui os valores depois de atualizar XD!!!
Como o Eclipse Implementou
Como eu arrumei
|
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/02/2012 15:05:39
|
Mickdark
Thread.start()
Membro desde: 17/11/2011 15:42:40
Mensagens: 41
Offline
|
Finalmente eu consegui XD!!!!
Eu mudei alguns mapeamentos e mudei algumas coisas no equals e hashCode, no final das contas tenho quase certeza de que o problema estava realmente no mapeamento da entidade colocando Merge e alterando por merge também e não mais por saveOrUpdate, bom pra quem estiver passando por este problema segue meu código completo!! Ha esqueci de dizer, eu estou usando o VRaptor como MVC, por isso algumas annotations que não fazem parte da JPA, como @Component !!
Explicação: Tabela de Privilegios, 1 privilegio pode ter 0 ou mais recursos (OneToMany), e cada recurso tem que ter pelo menos 1 privilegio (ManyToOne)
Código que faz o merge de acordo com a requisição na JSP!!
Metodo criado no privilegioDao!!
Eu fiz uma classe que guarda todas as consultas padrões, só não sei se é uma boa idéia, mas ta ai!!
Agora só preciso ver o de exclusão em cascata !!!
|
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/02/2012 09:48:06
|
Mickdark
Thread.start()
Membro desde: 17/11/2011 15:42:40
Mensagens: 41
Offline
|
O cascateamento utilizando Delete não funcionou de jeito nenhum, gostaria de saber se alguem ja tentou fazer um delete em um objeto desanexado apenas com o id?
Eu fiz um teste com JUnit, assim!!
|
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/02/2012 15:12:36
|
Mickdark
Thread.start()
Membro desde: 17/11/2011 15:42:40
Mensagens: 41
Offline
|
A unica maneira de fazer com que ele realizasse a exclusão em cascata, "Alem de ter o @Cascade(value={CascateType.DELETE}", foi chamando um refresh antes de excluir o objeto só com o id setado!!
Alguem sabe me dizer se desta maneira está correta?
|
 |
|
|
 |
|
|