与新创建相关的意外实体

时间:2014-11-26 13:41:34

标签: android orm greendao

在我的Android应用程序中,我使用GreenDao作为一个orm。

我有两个表:AB。表B具有表A的外键。 A个实体可以执行getBList()方法,B个实体可以执行getA()方法。

当我开始从数据库中删除一些具有连接A实体的B实体时,我注意到了奇怪的行为。现在,一些新创建的A实体已连接B个实体,但代码中没有连接:

A a = new A();
// setting some simple a fields, nothing with Bs
aDao.create(a);
a.getBList(); // not empty list

有人知道会导致这种行为的原因以及如何解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

这来自greenDao website

  

解决和更新多对多关系

     

在第一次请求时,懒惰地解决了多对多关系。后   即,相关实体缓存在一个内部的源实体中   列表对象。对关系的get方法的后续调用不会   查询数据库。

     

请注意,更新多对多关系需要一些额外的工作。   由于缓存了多个列表,因此在相关时不会更新它们   实体被添加到数据库中。以下代码说明了   行为:

List orders1 = customer.getOrders();
int size1 = orders1.size();

Order order = new Order();
order.setCustomerId(customer.getId());
daoSession.insert(order);

Listorders2 = customer.getOrders();
// size1 == orders2.size(); // NOT updated
// orders1 == orders2; // SAME list object
     

同样,您可以删除相关实体:

List orders = customer.getOrders(); daoSession.delete(newOrder);
orders.remove(newOrder);
     

有时,更新所有内容可能很麻烦甚至无法进行   添加相关实体后手动关联到多个关系   除去。为了救援,greenDAO重置了清除缓存的方法   名单。如果潜在的多对多关系可能发生变化,您可以   强制greenDAO重新加载相关实体列表:

customer.resetOrders();
List orders2 = customer.getOrders();

尝试在添加或删除元素时重置关系。