Bomba! DAO + Relacionamento 1..N  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
Thiago Senna
GUJ Master
[Avatar]

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
[Email]
louds
Moderador
[Avatar]

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
[ICQ]
Thiago Senna
GUJ Master
[Avatar]

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
[Email]
louds
Moderador
[Avatar]

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
[ICQ]
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?
Thiago Senna
GUJ Master
[Avatar]

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!
[Email]
Thiago Senna
GUJ Master
[Avatar]

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
[Email]
louds
Moderador
[Avatar]

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
[ICQ]
Thiago Senna
GUJ Master
[Avatar]

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
[Email]
Thiago Senna
GUJ Master
[Avatar]

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

[Email]
Thiago Senna
GUJ Master
[Avatar]

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
[Email]
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team