0

我有 2 个类AAABBB其中BBB包含一个AAA类型的字段。

当我调用makePersistent()10 个 AAA 对象和 10 个 BBB 对象时,数据存储区最终会包含 20 个 AAA 对象和 10 个 BBB 对象。我知道这是正常的,因为 GAE 的数据存储是非关系的。

但是,当我尝试deletePersistentAll使用以下内容时,

pm.newQuery(BBB.class).deletePersistentAll();
pm.newQuery(AAA.class).deletePersistentAll();

所有 BBB 对象都按预期删除,但所有 20 个 AAA 对象仍然存在。有什么我想念的吗?

4

1 回答 1

0

隔离和一致性
数据存储在事务之外的隔离级别最接近 READ_COMMITTED。

这些测试通过。

PersistenceManager pm = pmfInstance.getPersistenceManager();

// make 10 AAA objects
for (int i = 0; i < 10; i++) {
    pm.makePersistent(new AAA());
}

// make 10 BBB objects
for (int i = 0; i < 10; i++) {
    pm.makePersistent(new BBB(new AAA()));
}

// make sure we have 20 AAA's
@SuppressWarnings("unchecked")
List<AAA> aaa = (List<AAA>) pm.newQuery(AAA.class).execute();

assertEquals(20, aaa.size());

// make sure we have 10 BBB's
List<BBB> bbb = (List<BBB>) pm.newQuery(BBB.class).execute();

assertEquals(10, bbb.size());

// try to delete
pm.newQuery(BBB.class).deletePersistentAll();
bbb = (List<BBB>) pm.newQuery(BBB.class).execute();
assertEquals(0, bbb.size());

pm.newQuery(AAA.class).deletePersistentAll();
aaa = (List<AAA>) pm.newQuery(AAA.class).execute();
assertEquals(0, aaa.size());
assertEquals(0, bbb.size());
于 2011-01-07T21:53:53.110 回答