Предположим, у вас есть такой метод:
Entity entity = ofy().load().type(Entity.class)
.ancestor(key)
.filter("someField", someValue)
.first().now();
if (entity == null) {
// Entity does not exist yet.
// Write new entity to Datastore.
}
Метод проверяет, существует ли определенная сущность с помощью запроса предка. Если этого не происходит, он записывает его в хранилище данных.
Одна вещь, которую я обнаружил, состоит в том, что, если описанный выше метод выполняется дважды в одно и то же время, то записываются две сущности. Похоже, что entity
по-прежнему считается нулевым из-за состояния гонки.
Я думал, что запросы предков должны быть строго согласованными и, таким образом, предотвращать приведенный выше сценарий? Похоже, что он не является строго согласованным, когда сущность не существует.
Есть ли способ предотвратить запись двух сущностей в приведенном выше случае?