2

Objectifyを使用してアイテムをデータベースに保存しており、「名前」フィールドに一意性を適用したいと考えています。競合状態について心配し始める前に、私は些細な実装から始めています...

オブジェクトをデータベースに追加する方法は次のとおりです。

Objectify ofy = ObjectifyService.begin();

if (ofy.query(Item.class).filter("name", name).count() == 0) {
    Item newItem = new Item(name);
    ofy.put(newItem);
}

オブジェクトをすばやく数回挿入しようとすると、フィルターが既存のオブジェクトを検出して新しいオブジェクトが保存されないようにする前に、3つまたは4つのオブジェクトを作成できる場合があります。

これはローカルで実行されているため、まだGoogleAppEngineにデプロイされていません。

心配する必要がありますか?明らかな何かが欠けていますか?Itemクラスでキャッシュを明示的に有効にしていません。

(開発環境は「GooglePlugin for Eclipse」v1.5.2、Objectify 3.0です)

4

2 に答える 2

2

このHRDの動作は、@Parent属性と祖先クエリを使用して解決されます。http://code.google.com/p/objectify-appengine/wiki/AdvancedPatternsおよびhttp://code.google.com/appengine/docs/java/datastore/hr/overview.htmlも参照してください。

于 2011-11-25T15:22:05.260 に答える
0

コミットによってトランザクションを強制しようとしましたか?

http://code.google.com/p/objectify-appengine/wiki/IntroductionToObjectify#Transactions

于 2012-05-15T19:03:30.877 に答える