问题是查询返回除“ id”以外的所有列
我使用fts4,并且在文档中显示:
已启用FTS的表始终使用INTEGER类型的主键,并带有 列名“ rowid”。如果您的FTS表支持的实体定义了 主键,它必须使用该类型和列名。
这是我的实体类:
@Fts4
@Entity(tableName = "projects")
public class Project {
@ColumnInfo(name = "rowid")
@PrimaryKey(autoGenerate = true)
private int id;
private String name;
@ColumnInfo(name = "start_date")
private String startDate;
@ColumnInfo(name = "end_date")
private String endDate;
private String description;
@ColumnInfo(name = "icon_path")
private String iconPath;
private long budget;
public Project(String name, String startDate, String endDate, String description, String iconPath, long budget) {
this.name = name;
this.startDate = startDate;
this.endDate = endDate;
this.description = description;
this.iconPath = iconPath;
this.budget = budget;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getStartDate() {
return startDate;
}
public void setStartDate(String startDate) {
this.startDate = startDate;
}
public String getEndDate() {
return endDate;
}
public void setEndDate(String endDate) {
this.endDate = endDate;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getIconPath() {
return iconPath;
}
public void setIconPath(String iconPath) {
this.iconPath = iconPath;
}
public long getBudget() {
return budget;
}
public void setBudget(long budget) {
this.budget = budget;
}
这是我的简单查询:
@Query("SELECT * FROM projects")
public LiveData<List<Project>> getAllProjectsI);
我收到警告:
app.aarsham.projeno.data.Model.Project有一些字段[rowid] 查询未返回。如果不应该阅读它们 从结果中,您可以使用@Ignore批注对其进行标记。您可以 通过使用以下方法注释该方法来消除此警告 @SuppressWarnings(RoomWarnings.CURSOR_MISMATCH)。传回的栏 查询:名称,开始日期,结束日期,描述,icon_path,预算。 app.aarsham.projeno.data.Model.Project中的字段:rowid,name, 开始日期,结束日期,说明,图标路径,预算。
和一个错误:
查询返回的列中没有字段[id] 即使已添加注释,app.aarsham.projeno.data.Model.Project 为非null或原始值。查询返回的列: [名称,开始日期,结束日期,说明,图标路径,预算]
有人可以帮忙吗?
答案 0 :(得分:4)
使用FTS时,即使使用rowid
选择所有行,也必须在查询中显式包括行“ select *
”。
基本上,查询应类似于@Query("SELECT *, `rowid ` FROM projects")