2011-01-29 12 views

答えて

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

+0

JDOの例で更新されました。 –

+0

エンティティにすでに数値IDフィールドがある場合は、タイムスタンプの代わりにそのIDを使用することもできます。つまり、最高のIDを持つ20個のメッセージを取得できます。 –

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; 
} 
関連する問題