| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/07/2005 13:39:25
|
Thiago Senna
GUJ Master
![[Avatar]](/images/avatar/78719f11fa2df9917de3110133506521.jpg)
Membro desde: 11/02/2005 08:08:02
Mensagens: 1595
Offline
|
Olá GUJ's
Pessoal, deu um nó na minha cabeça!
Tenho uma empresa que pode ter n serviços prestados. Persistir empresa até que é moleza, mas não sei qual seria a melhor maneira de persistir o serviço prestado.
Bom, considerando que o serviço prestado depende que uma empresa exista, eu poderia persistir utilizando uma destas abordagens.
1 -
ou assim:
2 -
Reparem que na segunda abordagem eu não precisei persistir o servico antes de utilizá-lo. Quando dou o empresaDAO.update(empresa) subtendo que ele seja capaz de perceber que o servico1 e servico2 devem ser persistidos, e ele já faz para mim este serviço!
Ele também deveria perceber caso eu deletasse algum servicoPrestado.!
A questão é saber qual é a abordagem mais conveniente! A 2 parace ser melhor, mas é? Como vcs fazem isso?
Vou postar aqui um código de teste unitário, talvez fique melhor de entender!
Abraços!
Thiago Senna
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/07/2005 13:41:55
|
louds
Moderador
![[Avatar]](/images/avatar/1e48c4420b7073bc11916c6c1de226bb.jpg)
Membro desde: 29/04/2003 23:09:15
Mensagens: 4061
Localização: São Paulo
Offline
|
Só depende da sua boa vontade de implementar toda semântica de cascateamento das operações.
|
http://www.kumpera.net/blog/
http://www.mono-project.com/
"Each individual should work for himself. People will not sacrifice themselves for the company. They come to work at the company to enjoy themselves."
Soichiro Honda |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/07/2005 13:46:28
|
Thiago Senna
GUJ Master
![[Avatar]](/images/avatar/78719f11fa2df9917de3110133506521.jpg)
Membro desde: 11/02/2005 08:08:02
Mensagens: 1595
Offline
|
louds wrote:Só depende da sua boa vontade de implementar toda semântica de cascateamento das operações.
Boa... eu nunca fiz isso.
É apenas um trabalho de final de curso da facu. Vale a pena ter este trabalho? Isso é realmente trabalhoso?
Abraços!
Thiago Senna
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/07/2005 13:56:42
|
louds
Moderador
![[Avatar]](/images/avatar/1e48c4420b7073bc11916c6c1de226bb.jpg)
Membro desde: 29/04/2003 23:09:15
Mensagens: 4061
Localização: São Paulo
Offline
|
Hmm...
As partes dificeis são ordenação de operações, evitar que uma operação seja feita múltiplas vezes e ter um crítério para isUnsaved (bico, pk == null) e isModified (mais dificil, aop pode te ajudar).
|
http://www.kumpera.net/blog/
http://www.mono-project.com/
"Each individual should work for himself. People will not sacrifice themselves for the company. They come to work at the company to enjoy themselves."
Soichiro Honda |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/07/2005 13:59:05
|
ZehOliveira
GUJ Ranger
Membro desde: 12/12/2003 22:13:49
Mensagens: 964
Localização: Maceio-AL
Offline
|
É o tipo de problema que faz agente se convencer cada vez mais do quanto o Hibernate é útil.
Já desse uma olhada como ele faz esse tipo de coisa (associações bi-direcionais), Thiago?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/07/2005 14:07:41
|
Thiago Senna
GUJ Master
![[Avatar]](/images/avatar/78719f11fa2df9917de3110133506521.jpg)
Membro desde: 11/02/2005 08:08:02
Mensagens: 1595
Offline
|
ZehOliveira wrote:É o tipo de problema que faz agente se convencer cada vez mais do quanto o Hibernate é útil.
Já desse uma olhada como ele faz esse tipo de coisa (associações bi-direcionais), Thiago?
.. eu queria usar Hibernate... mas seu eu fazer isso é capaz de reprovarem meu trabalho.
É capaz dos professores alegarem que eu não execitei SQL como deveria!
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/07/2005 14:11:35
|
Thiago Senna
GUJ Master
![[Avatar]](/images/avatar/78719f11fa2df9917de3110133506521.jpg)
Membro desde: 11/02/2005 08:08:02
Mensagens: 1595
Offline
|
Valeu Louds!
Acho que vai valer a pena implementar este recurso.
O único problema agora seria como ele descobriria que servico foi excluido, mas tudo bém. Vcs já ajudaram bastante. Acho que daqui em diante posso me virar!!!
Abraços!
Thiago
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/07/2005 14:24:07
|
louds
Moderador
![[Avatar]](/images/avatar/1e48c4420b7073bc11916c6c1de226bb.jpg)
Membro desde: 29/04/2003 23:09:15
Mensagens: 4061
Localização: São Paulo
Offline
|
Use uma coleção inteligente.
Quer mais uma dica? Leeeeeia os fontes do hibernate. E se tiver de má vontade, uuuuuuse os fontes do hibernate (as modificações vão precisar ser LGPL).
|
http://www.kumpera.net/blog/
http://www.mono-project.com/
"Each individual should work for himself. People will not sacrifice themselves for the company. They come to work at the company to enjoy themselves."
Soichiro Honda |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/07/2005 14:31:43
|
Thiago Senna
GUJ Master
![[Avatar]](/images/avatar/78719f11fa2df9917de3110133506521.jpg)
Membro desde: 11/02/2005 08:08:02
Mensagens: 1595
Offline
|
Louds wrote: Quer mais uma dica? Leeeeeia os fontes do hibernate. E se tiver de má vontade, uuuuuuse os fontes do hibernate (as modificações vão precisar ser LGPL).
Deixa comigo! Vou implementar este Set inteligente... show de bola!
Abraços!
Thiago
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 13/07/2005 22:06:31
|
Thiago Senna
GUJ Master
![[Avatar]](/images/avatar/78719f11fa2df9917de3110133506521.jpg)
Membro desde: 11/02/2005 08:08:02
Mensagens: 1595
Offline
|
Pessoal...
Vejam o que acham.. decidi implementar um SmartArrayList sugerido pelo Louds, no entanto, ele guarda pra mim quais objetos foram adicionados, alterados e excluidos. Assim vai me ajudar com a implementação dos casdades!
Um defeito que há nesta abordagem é que vc sempre deverá marcar quais objetos serão alterados pelo DAO, usando o comando smartArrayList.update(seuObjeto);
Vejam aqui um teste unitário com a persistência usando o cascade com esta abordagem..
Bom, quando dou o comando empresa.updateServicoPrestado(sp1);, o objeto sp1 vai para dentro dos objetosAlterados do meu smartArrayList.
Assim, quando eu chamar o dao.update(empresa), o dao saberá quais objetos alterar!
Para o dao perceber qual objeto é novo, basta fazer o smartArrayList.getObjetosAdicionados, e ai eu uso o teste idPK == null, e se for verdadeiro, mando criar.
O que vocês acharam?
Está bom, posso ter problemas com esta solução mais pra frente? Vale a pena tocar esta idéia em frente?
Abraços!
Thiago Senna
This message was edited 3 times. Last update was at 13/07/2005 22:26:20
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/07/2005 12:57:15
|
Thiago Senna
GUJ Master
![[Avatar]](/images/avatar/78719f11fa2df9917de3110133506521.jpg)
Membro desde: 11/02/2005 08:08:02
Mensagens: 1595
Offline
|
Aproveitando, vou aproveitar este topico para documentar um artigozinho sobre o desgin pattern
Persistent Data Collections.
Achei que tem a ver com este tópico, e pode ser úttil para uma futura consulta.
http://www.cin.ufpe.br/~scbs/artigos/massoni_alves_soares_borba_sugarloafplop2001.pdf
Abraços!
Thiago
|
|
|
 |
|
|