android - 房间查询返回列子集时出错
问题描述
我在玩 Room,在那里我找不到解决问题的方法。
下面是数据。
桌子
CREATE TABLE `Employee` (
`id` INTEGER NOT NULL,
`first_name` TEXT,
`last_name` TEXT,
PRIMARY KEY(`id`)
);
表数据
实体
@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..
}
查询 1
@Query("Select * from Employee")
List<Employee> getEmployees();
结果 它成功了
查询 2
@Query("Select first_name, last_name from Employee")
List<Employee> getEmployees();
结果
错误:查询返回的列在 ***.Employee 中没有字段 [id],即使它们被注释为非空或原始。查询返回的列:[first_name, last_name]
如果我添加id
到上面Query 2
,它可以工作。
同样,如果我们Foreign Key
在表中有一个并且我们尝试查询列的子集,它会抛出错误。当我们在查询中添加Primary Key
&Foreign Key
列时出现错误。
问题 1
这是否意味着我们必须始终在 Query 中包含Primary Key
& Foreign Key
(如果存在)?
问题 2 引发此类错误的幕后实际发生了什么?还是我做错了什么?
房间版本 1.1.1
另外,参考了这个链接,但它并没有解决我的主键问题。
解决方案
要从多个字段中选择数据,请考虑以下示例。
从文档
Room 允许您从查询中返回任何基于 Java 的对象,只要结果列集可以映射到返回的对象。例如,您可以创建以下纯旧的基于 Java 的对象 (POJO) 来获取用户的名字和姓氏:
public class NameTuple {
@ColumnInfo(name = "first_name")
public String firstName;
@ColumnInfo(name = "last_name")
public String lastName;
}
现在,您可以在查询方法中使用此 POJO:
@Dao
public interface MyDao {
@Query("SELECT first_name, last_name FROM user")
public List<NameTuple> loadFullName();
}
推荐阅读
- oauth-2.0 - Google 助理 - 登录 Strava
- c++ - Makefile 不评估 OBJECTS 变量
- google-maps - 使用 Flutter 围绕谷歌地图标记中心相机位置
- javascript - 无法通过 DOM 将两个添加的元素拖到不同的位置
- ios - 使用 Swift 从字符串中检测数字年份
- android-fragments - 从 ListView 当前项观察 LiveData
- java - 我可以拥有一个对象类型的 ArrayList,其中包含指向 Java 中对象的指针列表吗?
- python - 字段名称和帮助文本在 Django 中以多种形式消失
- ansible - 替代的 ansible 语法
- javascript - 如何修复错误:JavaScript 错误:TypeError: undefined is not an object (evalating 'this.context.clearRect') 在第 24 行