2011-06-29 9 views
0

ここでは、私の例である:
は、データストア//位置1
に新しいエントリを追加し、データストア//位置2
に新しいエントリを追加し、データストア//位置3データストアからエントリを取得する方法を追加しましたか? (GoogleのアプリエンジンとJDO)

に新しいエントリを追加します。

今、私は位置2に追加されたエントリを取得したい。それはどのようにGoogleのアプリケーションエンジンとJDOで行うことができますか?

私には、PrimaryKeyにLong IDを指定してgetObjectByIdを使用する方法があります。したがって、長いIDは、データストアによって自動的に位置を格納するのと同じです。それを示して
コード:

import javax.jdo.annotations.*; 
import javax.jdo.PersistenceManager; 
import mypackage.PMF 

public class Entry { 
    @PrimaryKey 
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) 
    private Long ID; 

    //.. other fields 
} 


// create entries (suppose datastore is empty and i don't need deletes in future) 
PersistenceManager pm = PMF.get().getPersistenceManager() 
for(int i=0; i<10; i++){ 
    pm.makePersistent(new Entry()); 
} 
// created entries have their IDs exaclty = 1,2,3,4,5,6,7,8,9,10 ? 

// fetch entry, that was added second 
Key entryKey = KeyFactory.createKey(Entry.class.getSimpleName(), 2L); 
Entry secondEntry = pm.getObjectById(Entry.class, entryKey); 

私は長いIDフィールドは常に新しいエントリのために1ずつインクリメントされ、それが最初のための1に等しいことを確認することができますか? 他にも良い方法がありますか? :)

+0

「位置2」は正確に何に基づいていますか?あなたはそれに基づいているいくつかのプロパティを持っている必要があります。 – DataNucleus

+0

あなたが言ったことではないあなたがIDを意味するならば、単にIDでJDOQLクエリと注文を行い、2番目のアイテムを選んでください – DataNucleus

+0

"Position 2"は2番目に追加された要素のインデックスですデータベースへ)。 java:myArrayList.add(New Entry);のListと同様です。 myArrayList.add(新規エントリ); myArrayList.add(新規エントリ);今私は2番目の要素を取得cat:secondEntry = myArrayList.get(1)。私はデータストアで同じ動作をしたい – stalk

答えて

2

この「位置」という概念は、App Engineの概念ではありません。 App Engineは、システム生成IDがギャップなしで順番に割り当てられるという保証はありません。

あなたが注意している場合は、IDの割り当てを介して自分自身を取ることができhttp://code.google.com/appengine/docs/java/datastore/entities.html#Kinds_IDs_and_Names

を参照してください、しかし、あなたのアプリケーションとその使用パターンに応じて、独自のIDを作成すると、作成する能力を制限しますボトルネックを紹介新しいエンティティを迅速に作成します。

+0

私の問題のためのより良い解決策のように見えるクエリを使用することです...ありがとう! – stalk

関連する問題