4
respostas

Relacionamento Many-to-Many no Room

Olá, estou fazendo o curso de android Room e me deparei com uma dúvida. Irei dar um exemplo do que eu gostaria de fazer: -Tenho uma lista de Campeonatos -Tenho uma lista de Times

Um time disputa vários campeonatos, e campeonatos podem ter times os mesmos times de outros campeonatos.

Se eu quisesse criar um aplicativo no qual tivesse uma classe de Campeonatos, e outra Classe de Times.

Eu teria em uma activity uma lista de Campeonatos e ao clicar em cada campeonato eu recebo uma lista de Times (visto que os times podem se repetir em cada Campeonato) E teria também em outra activity uma lista de times a qual eu poderia vincular um Time a quantos campeonatos eu quiser.

-Como seria feito o relacionamento entre essas duas entidades no Room? -Como eu poderia vincular uma entidade à outra, podendo vincular um Time a mais de um Campeonato? (Visto que para cada Campeonato/Time diferente é gerado um Id diferente) -Como eu poderia acessar a lista de Times de um determinado Campeonato? Seria um get List no TimeDAO? Ou seria em um outro DAO separado?

4 respostas

Oi Leonardo, tudo bem ?

Cara acho que não precisa ser many to many

Acho que sim, os seus campeonatos terão diversos times, mas o time não precisa possuir o campeonato, na tela do time tu faz uma busca na tabela de campeonatos e vê em quais o seu time está.

Vai facilitar bastante sua vida.

Dá uma olhada nesse post que escrevi

Cara nao entendi muito bem.

Pelo que eu conheço da implementação do Room, eu poderia por exemplo, ao instanciar o Time (vamos chamar esse time de Santos), vincular à ele a foreign key (campeonatoId) de um Campeonato (vamos chamar esse primeiro campeonato de Brasileirão).

Até ai tudo bem, estaria colocando o Santos dentro do Brasileirão. Mas digamos que o Santos se classifica para um outro Campeonato (chamamos de Libertadores), então eu gostaria de adicionar o Santos à Libertadores, então seria só modificar o campeonatoId do Santos para o id da Libertadores.

Porém e se eu quiser manter o Santos simultâneamente no Brasileirão e na Libertadores? Como eu faria essa atribuição, visto que eu tenho apenas uma Foreign key no Santos chamada campeonatoId. Eu poderia criar um campeonato2Id, mas cada vez que eu criar um novo campeonato eu teria que ir la e adicionar uma foreign key, nao acho isso viável.

Uma coisa que eu pensei seria, ao adicionar um time que já consta em um campeonato em outro, eu criar um novo time com o mesmo nome, mas isso me parece ser má prática, além do que, se eu quisesse fazer uma análise de dados totais de gols de um time por exemplo, eu teria que procurar gols no Brasileirão, depois procurar um time com o mesmo nome na Libertadores e somar os gols, em vez de já ter tudo em um mesmo Time. Sem contar que eu poderia ter dois times diferentes com o mesmo nome, por exemplo dois Atléticos.

Isso me ajudou bastante, espero que te ajude https://developer.android.com/training/data-storage/room/relationships#many-to-many

Pois é Eduardo, eu li essa documentação, tentei implementar mas não consegui. Como o professor disse também que a minha situação não seria um many-to-many, fiquei mais na dúvida ainda.