У меня есть вопрос, и я не нашел то, что хотел. Я использую google Endpoints с appengine и Objectify. У меня есть объект Round, которому нужен ключ созданной игры. Поэтому, когда мне нужно создать новую Игру, я создаю свою новую игру, и после этого я создаю раунд с новым ключом. Я использую функцию .now(), чтобы сохранить игру, но иногда игра не создается, и у меня есть Round, созданный без игры. Поскольку это было проблематично, я решил зациклиться, чтобы получить игру, пока она не будет создана, но я знаю, что это очень плохой способ сделать это, и мне интересно, что я могу использовать вместо этого.Objectify: Использовать ключ сущности juste created
До:
//Create a new game
Game game = new Game(pending_game.getPlayer(),pending_game.getApplicant());
ofy().save().entity(game).now();
//Get the player just created
game = ofy().load().type(Game.class).filter("player1 =", pending_game.getPlayer()).filter("player2 =", pending_game.getApplicant()).first().now();
Key<Game> key_game = Key.create(Game.class, game.getId());
//We add the new round
Round round = new Round(key_game,generateWord());
ofy().save().entity(round).now();
Сейчас:
//Create a new game
Game game = new Game(pending_game.getPlayer(),pending_game.getApplicant());
ofy().save().entity(game).now();
Key<Game> key_game = null;
//Get the player just created
for(int i=0; i<5 && key_game == null;i++)
{
//Get the key of the new game created
game = ofy().load().type(Game.class).filter("player1 =", pending_game.getPlayer()).filter("player2 =", pending_game.getApplicant()).first().now();
key_game = Key.create(Game.class, game.getId());
}
//We add the new round
Round round = new Round(key_game,generateWord());
ofy().save().entity(round).now();
Спасибо за вашу помощь.
В дополнение к ответу ниже, причина, по которой вы видите поведение, которое вы являетесь, заключается в том, что запрос в конечном итоге является последовательным. Каждый цикл фактически повторно сохраняет объект; цикл продолжается, пока индексы запросов не догонят. Излишне говорить, что это плохой подход. – stickfigure