2010-09-28 36 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()); 
相關問題