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を作成する必要はありません...
プリミティブ型はデフォルトではnullではありません。価格をDoubleにすると、null可能になるため問題が解決します。さらに、カスタムゲッターを追加して、nullオブジェクトとしての価格を回避できます。
public double getPrice(){
if(this.price == null) return 0.0;
return this.price;
}
@ Ingoreは、回答に基づいて、Roomがフィールドを完全に無視するように指示します。フィールドは完全に無視されます。