Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

ForeignKey para definir relação "um para muitos" não funcionou

Tentei fazer conforme proposto pelo professor:

import static androidx.room.ForeignKey.CASCADE;

import androidx.room.Entity;
import androidx.room.ForeignKey;
import androidx.room.PrimaryKey;

@Entity
public class Telefone {

    @PrimaryKey(autoGenerate = true)
    private int id;
    private String numero;
    private TipoTelefone tipo;
    @ForeignKey(entity = Aluno.class, parentColumns = "id", 
       childColumns = "alunoId", 
       onDelete = CASCADE, 
       onUpdate = CASCADE) // <- solução do professor
    private int alunoId;

    //getters and setters

Mas quando tento o build:

error: annotation type not applicable to this kind of declaration
    @ForeignKey(entity = Aluno.class, parentColumns = "id", childColumns = "alunoId", onDelete = CASCADE, onUpdate = CASCADE)
    ^

1) Porque não funcionou?

Tentei fazer conforme a documentação, suprimindo o @ForeignKey da classe Telefone e criando uma terceira classe para relacionar os dois objetos:

import androidx.room.Embedded;
import androidx.room.Relation;

import java.util.List;

public class AlunoComTelefones {

    @Embedded public Aluno aluno;
    @Relation(
            parentColumn = "id",
            entityColumn = "alunoId"
    )

    public List<Telefone> telefones;

}

2) É um método equivalente? 3) Como fica o onDelete e onUpdate? Foram explicados na aula, mas só foram definidos no @ForeignKey. Nesse segundo modo, eu não defini.

1 resposta
solução!

Mauricio, tudo bem ?

Cara isso é relacionado com versão da biblioteca, a que você deve estar usando é mais recente do que o instrutor usou em aula, o que faz com que esse tipo de comportamento bizarro aconteça.

Se quiser definir a chave estrangeira é necessário colocar na definição da anotação @Entity, lá tu vai ver que existe um atributo foreignKeys, ai tu define todas que vão ter, inclusive pode colocar o esquema de cascade e tudo mais.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software