当我在字段上创建带有“ primaryKey”注释的“ Entity”以使用Room创建任何SQLite表时,Android Studio项目成功构建。但是,当我尝试使用复合主键创建“实体”时,无法构建项目。
不幸的是,由于我在项目中使用“ Dagger 2”,因此无法看到实际的构建错误。
注意:Project符合Kotlin编译器。
码:
@Entity(tableName = "thread_users", primaryKeys = {"thread_id", "user_id"})
public class DMThreadUsers {
@ColumnInfo(name = "thread_id")
private String threadId;
@ColumnInfo(name = "user_id")
private String userId;
@ColumnInfo(name = "is_left")
private boolean isLeft;
public DMThreadUsers() {
}
public String getThreadId() {
return threadId;
}
public void setThreadId(String threadId) {
this.threadId = threadId;
}
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public boolean isLeft() {
return isLeft;
}
public void setLeft(boolean left) {
isLeft = left;
}
}
最佳答案
主键字段应使用@NonNull注释。您必须在JAVA中为主键字段注释@NonNull,而在KOTLIN中,需要初始化主键字段。
@Entity(tableName = "thread_users", primaryKeys = {"thread_id", "user_id"})
public class DMThreadUsers {
@NonNull
@ColumnInfo(name = "thread_id")
private String threadId;
@NonNull
@ColumnInfo(name = "user_id")
private String userId;
@ColumnInfo(name = "is_left")
private boolean isLeft;
public DMThreadUsers() {
}
public String getThreadId() {
return threadId;
}
public void setThreadId(String threadId) {
this.threadId = threadId;
}
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public boolean isLeft() {
return isLeft;
}
public void setLeft(boolean left) {
isLeft = left;
}
}