web-dev-qa-db-ja.com

部屋エラー:クエリによって返された列にフィールドfieldnameがありません

POJOのサンプルは次のとおりです

public class Product{
  private long id;
  private String name;
  private double price;

 ... constructor for all fields
 ... getters and setters
}

今、私の製品DAOで、このようなクエリがある場合

@Query(select id, name from products)
LiveData<List<Product>> getProducts()

次のようなエラーが発生します。

クエリによって返された列には、nullまたはプリミティブ以外の注釈が付けられていても、フィールド[price] in ... Productがありません。クエリによって返される列:[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を作成する必要はありません...

6
Alin

プリミティブ型はデフォルトではnullではありません。価格をDoubleにすると、null可能になるため問題が解決します。さらに、カスタムゲッターを追加して、nullオブジェクトとしての価格を回避できます。

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

@ Ingoreは、回答に基づいて、Roomがフィールドを完全に無視するように指示します。フィールドは完全に無視されます。

3
Viktor Stojanov