5
respostas

Relacionamento 1:N

Oi,

no vídeo a annotation @ForeignKey é colocada sobre um atributo da classe (alunoId), porém na documentação ela é informada como um atributo da anotação @Entity.

@Entity(foreignKeys = @ForeignKey(entity = User.class, parentColumns = "id", childColumns = "user_id"))

Estou testando em um dispositivo real, utilizando o stheto para inspecionar a base de dados, quando deixo a annotation sobre o atributo da classe (alunoId), se o registro pai é removido os filhos não são removidos em cascata, porém quando utilizo @ForeignKey como atributo de @Entity, a remoção em cascata acontece corretamente.

Veja também outro trecho da documentação:

"Foreign keys are very powerful, as they allow you to specify what occurs when the referenced entity is updated. For instance, you can tell SQLite to delete all books for a user if the corresponding instance of User is deleted by including onDelete = CASCADE in the @ForeignKey annotation."

No meu caso, vou deixar como mencionado na documentação, pois resolveu o problema, mas poderia comentar a respeito?

Fonte: https://developer.android.com/training/data-storage/room/relationships

5 respostas

Oi Danilo, tudo bem?

Sobre o detalhe de cascade eu menciono durante o vídeo, foi configurado conforme a citação da documentação, sendo assim, eu não entendi a sua sugestão de modificação ou adição de conteúdo, consegue apresentar um exemplo de como está e do que está faltando com base no conteúdo apresentado na aula.

[]s

Oi Alex,

Dê uma olhada nas imagens abaixo, acredito que vai te ajudar a entender a questão:

https://github.com/danilocgraciano/android/blob/master/FK_VIDEO_AULA.png

https://github.com/danilocgraciano/android/blob/master/FK_DOCUMENTACAO.png

Conforme a sua amostra vi que trata-se da configuração inicial sem mencionar o onDelete ou o onUpdate, mas logo em seguida faço as configurações com eles mencionando sobre o motivo das suas existências.

Inclusive, é possível verificar todos os ajustes do vídeo por meio deste commit. Em específico o arquivo da classe Telefone.

Por isso fiquei em dúvida sobre a sua sugestão para comentar, se é sobre o cascade de delete ou update ou apenas a configuração que pode ser feita a nível classe.

[]s

Oi Alex,

Quanto aos atributos onUpdate e onDelete está tudo OK.

É somente sobre a configuração, pois na documentação é feita no nível de classe, e na vídeo aula é feita a nível de atributo.

Fiz esta observação apenas para contribuir com a aula, cujo conteúdo está muito bom.

Entendi, eu vou adicionar uma observação na atividade pós vídeo indicando a possibilidade de configuração via classe :)

Muito obrigado pelo feedback :D

[]s