【问题标题】:OrmLite – Prevent automatic database changes when adding to or removing from a ForeignCollectionOrmLite - 在添加到 ForeignCollection 或从中删除时防止自动数据库更改
【发布时间】:2014-02-15 20:41:39
【问题描述】:
目前,我正在使用 OrmLite,我有三个对象 A、B 和 C。A 包含 B 的 ForeignCollection,B 包含 C 的 ForeignCollection。每当我向 ForeignCollections 添加一个元素时,都会立即执行插入语句.每当我删除元素时,都会立即执行删除语句。
在创建或更新 A 之前,我想在不执行语句的情况下添加/删除。这可能吗?
【问题讨论】:
标签:
ormlite
foreign-collection
【解决方案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);
}