在Greendao中正确建立关系以获得内在实体

时间:2017-11-12 12:22:03

标签: android database entities 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;
// ...

当我想要获取所有购买时:

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

我想要给出所有内在的东西:ShopStats,Spend,Shop - like:

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

但在这里我得到了空。我该怎么做才能获取这样的内部对象?

我怀疑需要修复我的注释以绑定内部对象,但直到它不起作用。我尝试修复像@ToOne(joinProperty = "shopId")这样的注释,但它会产生异常:

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

请告诉我如何实现这一目标?或者我只能将每个列表对象与DaoSession分开?

1 个答案:

答案 0 :(得分:0)

回顾一下, 在每个Purchase内部有几个ShopStats,因为我可以在您的Purchase数据模型中看到有一个ShopStats列表,并且它有一个到{与Purchase

的许多关系

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

所以我认为您的代码purchasesList.get(i)会返回Purchase个对象。

然后purchasesList.get(i).getShopSatats()会返回List<ShopStats>而不是Shopstats

然后在每个Shopstats内有一个Spend

因此,您需要指定要获取的Shopstats Spend

提示:

  • 也许您可以将代码修改为

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

  • 也许您应该将实体类Shopstats重命名为Shopstat,将List<Shopstats> shopStats重命名为PurchaseList<Shopstat> shopStats。我的观点是确保Shopstats和Shopstats列表的名称有意义并且易于理解。

我是初学者,请告诉我您的反馈意见,如果您需要更多帮助,我将很乐意为您提供帮助*