error: If a primary key is annotated with autoGenerate, its type must be int, Integer, long or Long
error: If a primary key is annotated with autoGenerate, its type must be int, Integer, long or Long
我试图创建一个整数 id 作为主键,然后它要求我创建 getter 和 setter 方法,然后它要我动态设置 id 但我不想在我的应用程序中添加一个 id 字段,如果我必须自己设置 id,autoGenerate 有什么用?
import android.arch.persistence.room.ColumnInfo;
import android.arch.persistence.room.Entity;
import android.arch.persistence.room.PrimaryKey;
import android.support.annotation.NonNull;
@Entity(tableName = "messages")
public class Message {
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "message_date")
private String date;
@ColumnInfo(name = "message_timeHour")
private String timeHour;
@ColumnInfo(name = "message_timeMinute")
private String timeMinute;
@ColumnInfo(name = "message_contactName")
private String contactName;
@ColumnInfo(name = "message_text")
private String text;
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public String getTimeHour() {
return timeHour;
}
public void setTimeHour(String timeHour) {
this.timeHour = timeHour;
}
public String getTimeMinute() {
return timeMinute;
}
public void setTimeMinute(String timeMinute) {
this.timeMinute = timeMinute;
}
public String getContactName() {
return contactName;
}
public void setContactName(String contactName) {
this.contactName = contactName;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
}
这是什么意思,如何解决?
您需要使用 autoGenerate
属性
你的主键注释应该是这样的:
@PrimaryKey(autoGenerate = true)
引用here
每个@Entity 必须至少有一个主键。
@PrimaryKey(autoGenerate = true)
您应该将其用作
@PrimaryKey(autoGenerate = true)
private int id;
此外,您应该为这个 id 变量设置一个 setter,这样当 Room 需要设置主键值时,它将使用您的 setter 方法,因为您的 id 变量是私有的。所以,现在在这种情况下你根本不需要设置 id 。房间会处理它。
我试图创建一个整数 id 作为主键,然后它要求我创建 getter 和 setter 方法,然后它要我动态设置 id 但我不想在我的应用程序中添加一个 id 字段,如果我必须自己设置 id,autoGenerate 有什么用?
import android.arch.persistence.room.ColumnInfo;
import android.arch.persistence.room.Entity;
import android.arch.persistence.room.PrimaryKey;
import android.support.annotation.NonNull;
@Entity(tableName = "messages")
public class Message {
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "message_date")
private String date;
@ColumnInfo(name = "message_timeHour")
private String timeHour;
@ColumnInfo(name = "message_timeMinute")
private String timeMinute;
@ColumnInfo(name = "message_contactName")
private String contactName;
@ColumnInfo(name = "message_text")
private String text;
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public String getTimeHour() {
return timeHour;
}
public void setTimeHour(String timeHour) {
this.timeHour = timeHour;
}
public String getTimeMinute() {
return timeMinute;
}
public void setTimeMinute(String timeMinute) {
this.timeMinute = timeMinute;
}
public String getContactName() {
return contactName;
}
public void setContactName(String contactName) {
this.contactName = contactName;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
}
这是什么意思,如何解决?
您需要使用 autoGenerate
属性
你的主键注释应该是这样的:
@PrimaryKey(autoGenerate = true)
引用here
每个@Entity 必须至少有一个主键。
@PrimaryKey(autoGenerate = true)
您应该将其用作
@PrimaryKey(autoGenerate = true)
private int id;
此外,您应该为这个 id 变量设置一个 setter,这样当 Room 需要设置主键值时,它将使用您的 setter 方法,因为您的 id 变量是私有的。所以,现在在这种情况下你根本不需要设置 id 。房间会处理它。