Как использовать EntityManager для поиска сущности по идентификатору, не затрагивая кеш в одном запросе?

Это должно работать.

<a 
  href={`https://waze.com/ulll=${this.state.linkLat},${this.state.linkLng}&navigate=yes`} 
  target="_blank">
    Open in Waze
</a>
0
задан Alexandr 18 January 2019 в 19:59
поделиться

2 ответа

Почему бы не передать запрашиваемую блокировку непосредственно самому запросу?

MyEntity entity = entityManager.find(MyEntity.class, key, LockModeType.PESSIMISTIC_WRITE);

Насколько я понимаю, это делает именно то, что вы хотели. ( документация )

0
ответ дан Gergely Bacso 18 January 2019 в 19:59
поделиться

Я только что нашел метод getReference в EntityManager, который получает экземпляр, состояние которого можно лениво извлекать. Как сказано в документации:

Получить экземпляр, состояние которого можно лениво извлекать. Если запрошенный экземпляр не существует в базе данных, EntityNotFoundException генерируется при первом обращении к состоянию экземпляра. (Среде выполнения поставщика постоянства разрешается генерировать исключение EntityNotFoundException при вызове getReference.) Приложение не должно ожидать, что состояние экземпляра будет доступно после отсоединения, если только оно не было доступно приложению, пока был открыт менеджер сущностей.

В качестве возможного решения для поиска и блокировки обновленной сущности по идентификатору в одном запросе мы можем использовать следующий код:

MyEntity entity = entityManager.getReference(MyEntity.class, key);
entityManager.refresh(entity, LockModeType.PESSIMISTIC_WRITE);

Этот запрос создаст сущность (без базы данных запрос), а затем обновите и заблокируйте объект.

0
ответ дан Alexandr 18 January 2019 в 19:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: