Ali*_*lin 5 android android-sqlite android-room android-architecture-components
这是一个示例POJO
public class Product{
private long id;
private String name;
private double price;
... constructor for all fields
... getters and setters
}
Run Code Online (Sandbox Code Playgroud)
现在,在我的productDAO中,如果我有这样的查询
@Query(select id, name from products)
LiveData<List<Product>> getProducts()
Run Code Online (Sandbox Code Playgroud)
我收到如下错误:
查询返回的列在... Product中没有字段[price],即使它们被注释为非null或原始类型。查询返回的列:[id,name]
a)如果我进入我的产品并设置
@Nullable
private double price;
Run Code Online (Sandbox Code Playgroud)
错误仍然存在。
b)如果我进入我的产品并设置
@Ignore
private double price;
Run Code Online (Sandbox Code Playgroud)
错误消失了,但是如果我有另一个查询
@Query(select p.id, p.name, p.price, t.someField from products p inner join table t)
LiveData<List<Product>> getJoinQueryResponse()
Run Code Online (Sandbox Code Playgroud)
因为@Ignore已设置,价格返回为0.0。
那么如何解决呢?希望我不需要为房间的每个不同响应都做一个POJO ...
基本类型默认不为空。将价格加倍,这将解决问题,因为那时它将为空。此外,您可以添加自定义 getter 以避免价格成为空对象。
public double getPrice(){
if(this.price == null) return 0.0;
return this.price;
}
Run Code Online (Sandbox Code Playgroud)
@Ingore告诉 Room 完全忽略该字段,根据您的回答,这不是您想要的。
| 归档时间: |
|
| 查看次数: |
4743 次 |
| 最近记录: |