2012-02-04 18 views
0

私はDatastoreインターフェイスでGoogle App Engineを使用しています。Googleのデータストアで重複するエントリ

エンティティを更新しようとすると、全く新しいエンティティが作成されます。これは私が肯定的であるにもかかわらず、同じエンティティを保存していることを意味します。

これは私のコードです:

Key key=KeyFactory.createKey("user",Long.parseLong(ID)); 
DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); 
Entity entity=new Entity("user",key); 
entity.setProperty // ...whatever, updating the properties 
datastore.put(entity); //by putting an entity it's supposed to 
// either create a new one if non exists, or update an entity if it already exists 

私は私の管理コンソールで確認されているように、キーがすべての更新の際に同じであることを確信しています:

id=3001 600643316 
id=3002 600643316 
id=3003 600643316 

同じとエンティティの束キー(600643316)が作成されます。

答えて

1

データストアでは、数値IDではなく、Stringキー名を使用して新しいエンティティを作成することができます。数値IDはシステムに割り当てられたIDです。キーに数値IDがあり、文字列キー名ではない場合、データストアはそれを無視してシステムに割り当てられた数値IDで置き換えます。

例では、IDが文字列の場合は、Long.parseLong()ビットを削除するか、文字列に変換し直すことができます。 KeyFactory.createKey(String kind, String name)は、キー名でKeyを作成します。

0

ダンは正しいと思われます。これは正しい方法です。文字列を使用する必要がある独自のキーからキーを作成する場合は、Googleのガイドに説明されています。 "エンティティは、オブジェクトを作成するときに、エンティティがアプリケーションに割り当てられたキー名文字列またはシステムに割り当てられた数値IDをその識別子として使用する必要があるかどうかを指定します。 Entity employee = new Entity("Employee","asalieri"); "正しいと思われます。その例では2番目の引数は実際には文字列です - user1032663

+0

あなたはその答えを受け入れたものとしてマークする必要があります。 – DTing

関連する問題