2011-01-29 91 views
1

我在Google App Engine應用程序中有一個'Message'類,我想從數據存儲中檢索最後一個(最新的)類;像20條最新的消息。它看起來很基本,但我不知道如何用JDO創建這樣的查詢。使用JDO的GAE數據存儲的最新對象?

回答

2

首先,您必須在每個Message實體上存儲時間戳。然後,當這樣做:

public List<Person> get20NewestMessages() { 
    Query q = new Query("Message") 
    q.addSort("timestamp", SortDirection.DESCENDING); 
    PreparedQuery pq = ds.prepare(q); 
    return pq.asList(FetchOptions.Builder.withLimit(20)); 
} 

編輯正如你指出的那樣,這種使用低級別的數據存儲。這裏有一個JDO例如嘗試:

Query query = pm.newQuery(Message.class); 
query.setOrdering("timestamp desc"); 
query.setRange(0, 20); 
List<Message> messages = (List) query.execute(); 

(我沒有測試過這一點,它可能無法正常工作)

+0

解決方案使用低級別的Java數據存儲API,但它給了我所有的我需要用JDO來完成這些工作。非常感謝。 – Pascal 2011-01-29 04:12:36

0
import javax.jdo.PersistenceManager; 
import javax.jdo.Query; 
import javax.jdo.Transaction; 
... 

public List<Message> get20NewestMessages() { 
    PersistenceManager pm = PMF.get().getPersistenceManager();  
    Query q = pm.newQuery(Message.class); 
    q.setOrdering("timestamp desc"); 
    q.setRange(0, 20); 
    List<Message> messages = (List<Message>) q.execute(); 
    return messages; 
}