2011年7月5日 星期二

心得 Google app engine deletePersistentAll

JDO 中,可以利用 deletePersistentAll 來刪除符合條件的資料


例如.

javax.jdo.Query query = pm.newQuery(Person.class);
query.setFilter("height > 100");
query.deletePersistentAll();




不過若因為符合資料太多 則會造成 java.lang.OutOfMemoryError: Java heap space 的錯誤(heap 空間不夠),

可以考慮其他方式, 因為 google app enigne 的查詢只允許 1 個範圍的過濾查詢[2], 目前想到的方式是用order 後 取出前幾位,之後在將每個屬性判斷否符合條件在刪除, 用起來還真不方便....







參考

1 則留言:

  1. 若考慮使用選取前1000 筆資料的方法,就要改寫, 因為 deletePersistentAll 和 setRange 會有衝突,(有 條件式如 > )至少今天我試是會這樣,改寫得code



    PersistenceManager _thePm = PMF.get().getPersistenceManager();
    javax.jdo.Query query = _thePm.newQuery(Person.class);
    query.setFilter("height > 100");
    query.setRange(0, 1000);
    Object _InverterAll= query.execute();
    _thePm.deletePersistentAll(_InverterAll);
    _thePm.close();

    不過前幾天可以,今天是又不行

    回覆刪除