这是一个示例POJO
public class Product{
private long id;
private String name;
private double price;
... constructor for all fields
... getters and setters
}
现在,如果我有这样的查询,请在我的productDAO中
@Query(select id, name from products)
LiveData<List<Product>> getProducts()
我收到如下错误:
查询返回的列中没有字段[price] ...产品,即使它们被标注为非null或原始。 查询返回的列:[id,name]
a)如果我进入我的产品并设置
@Nullable
private double price;
错误仍然存在。
b)如果我进入我的产品并设置
@Ignore
private double price;
错误消失了,但是如果我有另一个查询实例
@Query(select p.id, p.name, p.price, t.someField from products p inner join table t)
LiveData<List<Product>> getJoinQueryResponse()
因为设置了@Ignore
,所以价格返回为0.0。
那么如何解决呢?希望我不需要针对来自房间的每个不同响应进行一次POJO ...
答案 0 :(得分:2)
默认情况下,原始类型不为null。将价格设置为 Double 即可解决此问题,因为它可以为空。此外,您可以添加自定义吸气剂,以避免将price作为空对象。
public double getPrice(){
if(this.price == null) return 0.0;
return this.price;
}
@Ingore 会告诉Room完全忽略该字段,根据您的回答,这不是您的意思。