2017-11-12 6 views
0

サーバからの応答を解析し、データベース(greendao)に保存します。すべてのオブジェクトが正しく保存されました。たとえば、私は実体がありますGreendaoで内部エンティティを取得するための関係を正しく作成する

@Entity(active = true, nameInDb = "PURCHASE") 
public class Purchase { 
    private long purchaseShopId; 
    private String createdAt; 
    @ToMany(referencedJoinProperty = "shopId") 
    private List<ShopStats> shopStats; 
// ... 

@Entity(active = true, nameInDb = "SHOP_STATS") 
public class ShopStats { 
    private long shopId; 
    @ToOne 
    private Shop shop; 
    @ToOne 
    private Spend spend; 
// ... 

@Entity(active = true, nameInDb = "SHOP_STATS_SPEND") 
public class Spend { 
    private long shopId; 
    @SerializedName("sum") 
    private float paymentSum; 
    @SerializedName("discount_sum") 
    private float discountSum; 
// ... 

を、私はすべての購入を取得したいとき:、ShopStats、ショップを過ごす - のような:

List<Purchase> purchasesList = getDaoSession().getPurchaseDao().loadAll(); 

は、私はすべての内部オブジェクトを与えることexcpected

Spend spend = purchasesList.get(i).getShopSatats().getSpend(); // in cycle 

しかし、ここではnullが返されます。このような内部オブジェクトをフェッチするにはどうすればよいですか?

内部オブジェクトをバインドするために注釈を修正する必要があると思われますが、それが機能しなくなるまでです。私はこのような@ToOne(joinProperty = "shopId")修正注釈をしようとしたが、それは例外を生成します。

If @ToOne with foreign property used, @Column and @Unique are ignored

私がこれを達成することができますどのようにアドバイスを与えてください?あるいは、DaoSessionとは別に各リストオブジェクトを取得することはできますか?ただ、要約へ

答えて

0

、 私はそこShopStatsのリストであり、それはPurchase

@ToMany(referencedJoinProperty = "shopId") private List<ShopStats> shopStats;

と1対多の関係を有するだと、あなたの Purchaseデータモデルに見ることができるので、いくつかの ShopStatsがある Purchase各インサイド

あなたのコードpurchasesList.get(i)はあなたにPurchaseオブジェクトを返すと思います。

その後purchasesList.get(i).getShopSatats()は次に、各Shopstats内の1 Spend

だから、あなたが取得したいSpendShopstats年代指定する必要があり、あなたにList<ShopStats>とNOT単一Shopstats

を返します。

ヒント:

  • たぶん、あなたはたぶん、あなたはList<Shopstat> shopStatsShopstatにごEntityクラスShopstatsPurchaseであなたのList<Shopstats> shopStatsの名前を変更する必要があり

Spend spend = purchasesList.get(i).getShopSatats().get(j).getSpend(); // in cycle

  • ようにコードを変更することができます。私のポイントは、ShopstatsとShopstatsのリストには意味があり、わかりやすい名前が付いていることを確認することです。

私は初心者です、私はあなたのフィードバックを知っていると*

任意のより多くの助けが必要な場合、私はあなたを助けるために喜んでいますよ
関連する問題