在我的Android应用程序中,我使用GreenDao作为一个orm。
我有两个表:A
和B
。表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
有人知道会导致这种行为的原因以及如何解决这个问题吗?
答案 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();
尝试在添加或删除元素时重置关系。