房间查询返回列子集时出错

aka*_*tra 5 android android-sqlite android-room android-architecture-components

我在玩 Room,在那里我找不到解决问题的方法。

下面是数据。

桌子

CREATE TABLE `Employee` (
    `id` INTEGER NOT NULL,
    `first_name` TEXT,
    `last_name` TEXT,
    PRIMARY KEY(`id`)
);
Run Code Online (Sandbox Code Playgroud)

表格数据

在此处输入图片说明

实体

@Entity(tableName = "Employee")
public class Employee {

    @PrimaryKey
    private int id;

    @ColumnInfo(name = "first_name")
    private String firstName;

    @ColumnInfo(name = "last_name")
    private String lastName;

    ..Getters & Setters..
}
Run Code Online (Sandbox Code Playgroud)

查询 1

@Query("Select * from Employee")
List<Employee> getEmployees();
Run Code Online (Sandbox Code Playgroud)

结果 成功

查询 2

@Query("Select first_name, last_name from Employee")
List<Employee> getEmployees();
Run Code Online (Sandbox Code Playgroud)

结果

错误:查询返回的列在 ***.Employee 中没有字段 [id],即使它们被注释为非空或原始。查询返回的列:[first_name, last_name]

如果我添加id到上面Query 2,它会起作用。

同样,如果我们Foreign Key在表中有 a并且我们尝试查询列的子集,它会抛出错误。当我们在查询中同时添加Primary Key&Foreign Key列时,错误就会发生。

问题 1 这 是否意味着我们必须始终 在 Query 中包含Primary Key& Foreign Key(如果存在)?

问题 2 在它引发此类错误的背后究竟发生了什么?还是我做错了什么?

房间版本 1.1.1

另外,引用了这个链接,但它没有解决我的主键问题。

kar*_*ran 10

要从多个字段中选择数据,请考虑以下示例。

从文档

只要结果列集可以映射到返回的对象中,Room 就允许您从查询中返回任何基于 Java 的对象。例如,您可以创建以下基于 Java 的普通对象 (POJO) 来获取用户的名字和姓氏:

public class NameTuple {
    @ColumnInfo(name = "first_name")
    public String firstName;

    @ColumnInfo(name = "last_name")
    public String lastName;
}
Run Code Online (Sandbox Code Playgroud)

现在,您可以在查询方法中使用此 POJO:

@Dao
public interface MyDao {
    @Query("SELECT first_name, last_name FROM user")
    public List<NameTuple> loadFullName();
}
Run Code Online (Sandbox Code Playgroud)