我在班级的某些字段上收到此错误
错误:字段具有非唯一列名称
@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”。正如您所看到的那样,这是一个编译错误,除了标题中的句子外,它不再提供有关错误的信息。
修改:我尝试更改变量名称但不起作用。
编辑:“获胜”的getter和setter方法,其他方法看起来与此完全相同。
public int getWin() {
return win;
}
public void setWin(int win) {
this.win = win;
}
答案 0 :(得分:2)
您需要添加一个前缀,以避免重复的列名。根据官方文档:
前缀 字符串前缀() 指定前缀,以在嵌入字段中的字段列名之前添加
。对于上面的示例,如果我们写过:
@Embedded(prefix =“ foo_”)坐标坐标;
https://developer.android.com/reference/android/arch/persistence/room/Embedded.html#prefix()
答案 1 :(得分:0)
我找到了一个解决方案(好吧,实际上并不是解决方案)。 我有另一个名为“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 */
事实证明,带有“嵌入式”注释的变量“团队”是我的问题的根源。当我删除它,代码工作正常。如果有人能向我解释我做错了什么(或者我做错了吗?)我会很感激。
修改:找到与此问题相关的一些链接。
https://github.com/googlesamples/android-architecture-components/issues/318