目前,我正在使用OrmLite,我有三个对象A,B和C. A包含一个ForeignCollection B,B包含一个ForeignCollection C.无论何时我向ForeignCollections添加一个元素,一个insert语句立即执行。删除元素时,会立即执行delete语句。
我想在没有执行语句的情况下添加/删除,直到我创建或更新A.这可能吗?
答案 0 :(得分:1)
我想在没有执行语句的情况下添加/删除,直到我创建或更新A.这可能吗?
目前无法做到这一点。延迟加载的集合甚至不存储项目本身,因此无法在以后更改缓存的想法。
然而,你可以自己做这件事。您可以在实体中保留一个项目列表,然后覆盖dao.create(...)
和dao.update(...)
方法,以便在您的特殊集合中有任何缓存项目时调用collection.addAll(...)
。
private List<Item> foreignItemsToAdd;
...
private void addForeignItem(Item item) {
if (foreignItemsToAdd == null) {
foreignItemsToAdd = new ArrayList<Item>();
}
}
然后dao会有类似的东西:
@Override
public int create(ParentItem parent) throws SQLException {
if (parent.getForeignItemsToAdd() != null) {
parent.getForeignItems().addAll(parent.getForeignItemsToAdd());
}
return super.create(parent);
}