Проблема компиляции комнаты - столбец ссылается на внешний ключ, но он не является частью индекса - PullRequest
0 голосов
/ 28 октября 2019

Я новичок в разработке приложений для Android и создаю приложение, в котором есть Trips, в котором хранятся локации.

Я получаю ошибку компиляции: «Столбец trip_Id ссылается на внешний ключ, но он не является частью индекса. Это может вызвать полное сканирование таблицы при изменении родительской таблицы, поэтому настоятельно рекомендуется создать индекскоторый охватывает этот столбец. "

У меня есть 2 таблицы: Trip & Location.

Я попытался проиндексировать tripId и locationId в их соответствующих классах, но это не решает проблему.

У поездки есть свой идентификатор (PK), название, описание и приоритет.

Местоположение имеет свои locationId (PK), tripId (FK), locationName и LatLng места.

@Entity(tableName = "location_table",
        foreignKeys = @ForeignKey(entity = Trip.class, parentColumns = "location_Id", childColumns = "trip_Id"),
        indices = {@Index(value = {"locationId"}, unique = true)})
public class Location {

    @PrimaryKey(autoGenerate = true)
    private int locationId;

    @ColumnInfo (name = "trip_Id")
    private int tripId;

    private String locationName;

    @TypeConverters(LatLngConverter.class)
    private LatLng latLng;


@Entity(tableName = "trip_table", indices = {@Index(value = {"id"}, unique = true)})

public class Trip {

    @PrimaryKey(autoGenerate = true) // with each new row SQLite will automatically increment this ID so it will be unique
    @ColumnInfo (name = "location_Id")
    private int id;

    private String title;

    private String description;

    private int priority;

Кажется, я не могу понять, что не так

1 Ответ

0 голосов
/ 28 октября 2019

Это сообщение является предупреждением, возможны другие ошибки (см. 2-ую предлагаемую строку). например,

enter image description here

Использование indices = {@Index(value = {"locationId"}, unique = true),@Index(value = {"trip_Id"})}) должно преодолеть это предупреждение.

ОДНАКО , нет необходимости иметь (дополнительный) индекс для locationId , так как он уже проиндексирован как первичный ключ (это будет пустая трата, а такженеэффективен). Поэтому предлагается использовать: -

indices = {@Index(value = {"trip_Id"})})

Я считаю, что ваша общая проблема заключается в том, что вы ссылаетесь на имя переменной объекта для столбца, когда, если у вас есть @ColumnInfo(name ="????"), то вы должны ссылатьсяна имя

  • т.е. это имя столбца в базовой таблице.

Вы также должны использовать location_Id вместо id в поездке: -

@Entity(tableName = "trip_table", indices = {@Index(value = {"location_Id"}, unique = true)})
...