Objectify - генерирует ли транзакция ConcurrentModException в случае одновременного создания объекта?

Вызывает ли Objectify исключение ConcurrentModificationException в случае, когда сущность с тем же ключом (без родительского элемента) создается одновременно (если до этого не существовало) в двух разных транзакциях? Я только что нашел информацию о том, что сущность уже существует и изменена, но не в том случае, если она еще не существует...

            ofy().transactNew(20, new VoidWork() {

            @Override
            public void vrun() {
                Key<GameRequest> key = Key.create(GameRequest.class, numberOfPlayers + "_" + rules);
                Ref<GameRequest> ref = ofy().load().key(key);

                GameRequest gr = ref.get();
                if(gr == null) {

                    // create new gamerequest and add... 
                    // <-- HERE
                } else {
                    ...
                }


            }
        });

Спасибо!

1 ответ

Решение

Да, вы получите CME, если что-то в этой группе сущностей изменится, включая создание и удаление сущностей.

Код, который вы показываете, должен работать нормально. Если вы действительно не знаете, что делаете, вам, вероятно, лучше просто использовать метод transact(), не пытаясь ограничить повторные попытки или форсировать новую транзакцию. В 99% случаев transact() работает правильно.

Другие вопросы по тегам