В дополнение к ответу @Adrian Shum, я хочу показать, как я решил эту проблему. Если вы хотите вручную изменить версию Entity и выполнить обновление, чтобы вызвать OptimisticConcurrencyException
, вы можете просто скопировать Entity со всем своим полем, что заставило объект покинуть свой контекст (так же, как EntityManager.detach()
). Таким образом, он ведет себя надлежащим образом.
Entity entityCopy = new Entity();
entityCopy.setId(id);
... //copy fields
entityCopy.setVersion(0L); //set invalid version
repository.saveAndFlush(entityCopy); //boom! OptimisticConcurrencyException
EDIT: собранная версия работает, только если кэш-память спящего режима не содержит объект с тем же идентификатором. Это не сработает:
Entity entityCopy = new Entity();
entityCopy.setId(repository.findOne(id).getId()); //instance loaded and cached
... //copy fields
entityCopy.setVersion(0L); //will be ignored due to cache
repository.saveAndFlush(entityCopy); //no exception thrown
Похоже, что ваше приложение находится в «живом» режиме.
Более новые приложения должны быть переведены в режим разработки, чтобы в этом диалоговом окне Graph API Explorer отображались все доступные разрешения; в противном случае вы ограничены несколькими стандартными и уже проверенными.
Итак, но ваше приложение в режиме разработки, чтобы иметь возможность разрабатывать и тестировать вашу функцию.