I'm getting this error on some of the fields of my class
error: Field has non-unique column name
@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 */
}
For example, i get this error on "win" , "draw", "groupId". But not on "id" or "name". And as you can see it's a compile error and it doesn't provide anymore information about the error except that sentence in the title.
Edit: I tried changing the name of variables but it didn't work.
Edit: Getter and setter methods for "win", other methods look exactly like this one.
public int getWin() {
return win;
}
public void setWin(int win) {
this.win = win;
}
You need to add a prefix in order to avoid columns name duplication. From the official documentation:
prefix String prefix () Specifies a prefix to prepend the column names of the fields in the embedded fields.
For the example above, if we've written:
@Embedded(prefix = "foo_") Coordinates coordinates;
https://developer.android.com/reference/android/arch/persistence/room/Embedded.html#prefix()
I found a solution (well, not actually a solution). I have another entity called "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 */
Turns out that The variable "teams" with "Embedded" annotation was the source of my problems. when i remove it, the code works just fine. If someone could explain to me what i did wrong (or did i?) i'd appreciate it.
Edit: Found some links related to this problem.
Android Room @Embedded annotation compilation fails for @NonNull annotated constructor parameters of a POJO defined in a library module
https://github.com/googlesamples/android-architecture-components/issues/318
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With