Ошибка компиляции базы данных: поле имеет неуникальное имя столбца - PullRequest
0 голосов
/ 27 апреля 2018

Я получаю эту ошибку на некоторых полях моего класса

ошибка: поле имеет неуникальное имя столбца

@Entity(tableName = "Team", foreignKeys = {
    @ForeignKey(entity = Group.class, parentColumns = "id", childColumns = "groupId")},
    indices = {@Index("groupId")})
public class Team {

    @PrimaryKey
    private long id;
    private long groupId;
    @SerializedName("Team")
    private String name;
    private String englishName;
    @SerializedName("Played")
    private int played;
    @SerializedName("Victories")
    private int win;
    @SerializedName("Draws")
    private int draw;
    @SerializedName("Defeats")
    private int defeat;
    @SerializedName("Made")
    private int goalFor;
    @SerializedName("Let")
    private int goalAgainst;
    @SerializedName("Diff")
    private int goalDiff;
    @SerializedName("Points")
    private int points;

    public Team() {

    }

    /* getter and setter methods */
}

Например, я получаю эту ошибку на "win", "draw", "groupId". Но не на «идентификатор» или «имя». И, как вы можете видеть, это ошибка компиляции, и она больше не предоставляет информацию об ошибке, кроме этого предложения в заголовке.

Редактировать: Я пытался изменить имя переменных, но это не сработало.

Редактировать: Методы получения и установки для "win", другие методы выглядят точно так же, как этот.

public int getWin() {
    return win;
}

public void setWin(int win) {
    this.win = win;
}

Ответы [ 2 ]

0 голосов
/ 16 января 2019

Вам необходимо добавить префикс, чтобы избежать дублирования имен столбцов. Из официальной документации:

префикс Строковый префикс () Задает префикс для добавления имен столбцов полей во встроенных полях.

Для примера выше, если мы написали:

@ Embedded (prefix = "foo_") Координаты координат;

https://developer.android.com/reference/android/arch/persistence/room/Embedded.html#prefix()

0 голосов
/ 28 апреля 2018

Я нашел решение (ну, на самом деле это не решение). У меня есть другой объект под названием «Группа»:

@Entity
public class Group {

    @PrimaryKey
    private long id;
    private String name;
    @Embedded
    private List<Team> teams;

    public Group() {

    }

    public Group(String name) {
        this.name = name;
    }

    /* getter and setter methods */

Оказывается, что источником моих проблем была переменная «команды» с аннотацией «Embedded». когда я удаляю его, код работает просто отлично. Если бы кто-то мог объяснить мне, что я сделал не так (или сделал?), Я был бы признателен.

Редактировать: Найдено несколько ссылок, связанных с этой проблемой.

Android Room @ Сбой встроенной компиляции аннотации для аннотированных @NonNull параметров конструктора POJO, определенных в библиотечном модуле

https://github.com/googlesamples/android-architecture-components/issues/318

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...