Запрос базы данных Android Room не возвращает столбец идентификатора - PullRequest
0 голосов
/ 29 ноября 2018

Проблема заключается в том, что запрос возвращает все столбцы, кроме '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).Столбцы, возвращаемые запросом: имя, дата начала, дата окончания, описание, путь к значку, бюджет.Поля в app.aarsham.projeno.data.Model.Project: rowid, name, start_date, end_date, description, icon_path, budget.

и ошибка:

Столбцы, возвращаемые запросом, не имеют полей [id] в app.aarsham.projeno.data.Model.Project, даже если они аннотированы как ненулевые или примитивные.Столбцы, возвращаемые запросом: [name, start_date, end_date, description, icon_path, budget]

Может кто-нибудь помочь с этим?

1 Ответ

0 голосов
/ 30 декабря 2018

При использовании FTS вам необходимо явно включить строку «rowid» в запрос, даже если вы используете select * для выбора всех строк.

По сути, запрос должен выглядеть так: @Query("SELECT *, `rowid ` FROM projects")

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...