我从服务器解析响应并将其保存到数据库(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分开?
答案 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
重命名为Purchase
至List<Shopstat> shopStats
。我的观点是确保Shopstats和Shopstats列表的名称有意义并且易于理解。我是初学者,请告诉我您的反馈意见,如果您需要更多帮助,我将很乐意为您提供帮助*