Objectify: задержка между "put ()" и объектом, найденным с помощью "query ()" - PullRequest
2 голосов
/ 22 августа 2011

Я использую Objectify для хранения элементов в базе данных и хочу обеспечить уникальность в поле «имя».Я начинаю с тривиальной реализации, прежде чем начать беспокоиться о состоянии гонки ...

Вот как я добавляю объект в базу данных:

Objectify ofy = ObjectifyService.begin();

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

Если я пытаюсь вставитьнесколько раз быстро, иногда я смогу создать три или четыре, прежде чем фильтр найдет существующие объекты и предотвратит сохранение нового.

Это выполняется локально - поэтому не было развернуто в Google AppДвигателя пока нет.

Должен ли я волноваться?Я что-то упускаю из виду?Я явно не включил кэширование в классе Item.

(Средой разработки является «Плагин Google для Eclipse» v1.5.2, Objectify 3.0)

Ответы [ 2 ]

2 голосов
/ 25 ноября 2011

Это поведение HRD решается с помощью запросов @Parent и запросов предков.Смотрите также http://code.google.com/p/objectify-appengine/wiki/AdvancedPatterns и http://code.google.com/appengine/docs/java/datastore/hr/overview.html

0 голосов
/ 15 мая 2012

Вы пытались форсировать транзакцию с помощью коммита?

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

...