目前,我正在使用 OrmLite,我有三个对象 A、B 和 C。A 包含 B 的 ForeignCollection,B 包含 C 的 ForeignCollection。每当我向 ForeignCollections 添加一个元素时,都会立即执行插入语句。每当我删除元素时,都会立即执行删除语句。
在创建或更新 A 之前,我想在不执行语句的情况下添加/删除。这可能吗?
目前,我正在使用 OrmLite,我有三个对象 A、B 和 C。A 包含 B 的 ForeignCollection,B 包含 C 的 ForeignCollection。每当我向 ForeignCollections 添加一个元素时,都会立即执行插入语句。每当我删除元素时,都会立即执行删除语句。
在创建或更新 A 之前,我想在不执行语句的情况下添加/删除。这可能吗?
在创建或更新 A 之前,我想在不执行语句的情况下添加/删除。这可能吗?
目前没有办法做到这一点。延迟加载的集合本身甚至不存储项目,因此缓存更改以供以后使用的想法是不可能的。
但是,您可以自己执行此操作。您可以在实体中保留一个项目列表,然后如果您的特殊集合中有任何缓存项目,则覆盖dao.create(...)
anddao.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);
}