2010-09-28 47 views
0

我有2个类AAABBB,其中BBB包含AAA类型的字段。无法从Google App Engine数据存储中删除持久对象

当我在10个AAA和10个BBB对象上调用makePersistent()时,数据存储结束时有20个AAA对象和10个BBB对象。我知道这是正常的,因为GAE的数据存储是非关系的。

然而,当我尝试deletePersistentAll使用以下,

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

所有BBB对象将会被移除预期,但所有20个AAA对象依然存在。有什么我失踪?

回答

0

Isolation and Consistency
数据存储的事务外的隔离级别最接近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());