Room数据库编译错误:字段具有非唯一列名

5

我在我的类的一些字段上遇到了这个错误

错误:字段具有非唯一列名

@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”上出现了错误,但在“id”或“name”上没有。正如您所看到的,这是一个编译错误,并且除了标题中的那个句子外,它不提供任何有关错误的信息。
编辑:我尝试更改变量的名称,但它没有起作用。
编辑:对于“win”的getter和setter方法,其他方法看起来完全相同。
public int getWin() {
    return win;
}

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

你能为 win 添加getter和setter吗? - Michał Baran
刚刚添加了这些方法。 - Peyman
尝试在字段中添加@ColumnInfo(name = “xxxx”)以指定它们在SQL表中的名称,也许序列化名称有冲突?我不确定。无论如何,我会将它们设置为公共的,并删除getter/setter,除非你真的需要它们。 - Martin Marconcini
尝试过了,没有成功。 - Peyman
我找到了一些东西,并用答案解释了它。 - Peyman
2个回答

15

1
我找到了一个解决方案(其实并不是真正的解决方案)。 我有另一个名为“Group”的实体:
@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 */

事实证明,带有“嵌入式”注释的变量“teams”是我问题的根源。当我删除它时,代码就可以正常工作了。如果有人能解释一下我做错了什么(或者我没有做错?),我会很感激。

编辑:找到了一些与此问题相关的链接。

Android Room @Embedded注释编译失败,针对在库模块中定义的POJO的@NonNull注释构造函数参数

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接