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

[Dúvida] Problema de chave estrangeira

Prezado(a), fui dar build e apresenta um alerta na imagem abaixo que impede a execução do app

Insira aqui a descrição dessa imagem para ajudar na acessibilidadecódigo fonte abaixo:

package com.example.agenda.model;

import static androidx.room.ForeignKey.CASCADE;

import androidx.room.ColumnInfo; import androidx.room.Entity; import androidx.room.ForeignKey; import androidx.room.PrimaryKey; @Entity( foreignKeys = { @ForeignKey( entity = Aluno.class, parentColumns = "id", childColumns = "alunoId", onUpdate = CASCADE, onDelete = CASCADE ) } ) public class Telefone { @PrimaryKey(autoGenerate = true) private int id; private String numero; private TipoTelefone tipo; @ColumnInfo(name = "alunoId") private int alunoId;

public Telefone(String numeroFixo, TipoTelefone tipo, int alunoId) {
    this.numero = numeroFixo;
    this.tipo = tipo;
    this.alunoId = alunoId;
}

public Telefone() {

}


public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public TipoTelefone getTipo() {
    return tipo;
}

public void setTipo(TipoTelefone tipo) {
    this.tipo = tipo;
}

public int getAlunoId() {
    return alunoId;
}

public void setAlunoId(int alunoId) {
    this.alunoId = alunoId;
}

public String getNumero() {
    return numero;
}

public void setNumero(String numero) {
    this.numero = numero;
}

}

1 resposta
solução!

Oi!

O aviso que você está recebendo durante a compilação está relacionado ao uso de uma chave estrangeira (foreign key) em sua classe Telefone. O aviso específico aponta que a coluna alunoId é uma coluna referenciada por uma chave estrangeira, mas não faz parte de um índice. O aviso sugere que você crie um índice que cubra essa coluna para evitar varreduras completas da tabela sempre que a tabela pai for modificada.

Para resolver esse problema, você pode criar um índice na coluna alunoId usando a anotação @Index do Room. Aqui está como você pode fazer isso no código:

@Entity(foreignKeys = {
    @ForeignKey(
        entity = Aluno.class,
        parentColumns = "id",
        childColumns = "alunoId",
        onUpdate = CASCADE,
        onDelete = CASCADE
    )
})
public class Telefone {
    @PrimaryKey(autoGenerate = true)
    private int id;
    private String numero;
    private TipoTelefone tipo;

    @ColumnInfo(name = "alunoId")
    private int alunoId;

    @Index(name = "index_alunoId") // Adicione esta anotação para criar um índice
    public int getAlunoId() {
        return alunoId;
    }
    // Restante do seu código...
}

Adicionando @Index(name = "index_alunoId") na função getAlunoId() ou diretamente na declaração da variável alunoId, você está criando um índice para essa coluna. Isso deve resolver o aviso e melhorar o desempenho quando você realiza operações relacionadas ao alunoId.

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