室错误:查询返回的列没有字段fieldname

时间:2018-06-21 11:41:08

标签: 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
}

现在,如果我有这样的查询,请在我的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 ...

1 个答案:

答案 0 :(得分:2)

默认情况下,原始类型不为null。将价格设置为 Double 即可解决此问题,因为它可以为空。此外,您可以添加自定义吸气剂,以避免将price作为空对象。

public double getPrice(){
    if(this.price == null) return 0.0;
    return this.price;
}

@Ingore 会告诉Room完全忽略该字段,根据您的回答,这不是您的意思。