Какое влияние выполняет executeUpdate () на кеш JPA? - PullRequest
0 голосов
/ 04 марта 2012

Я использую OpenJPA. Если я хочу выполнить массовое удаление / обновление с использованием метода executeUpdate (), будет ли обновлен кэш JPA? Или это обойдет кеш JPA? Когда я говорю «кеш», я говорю о кешах L1 и L2. Имеет ли значение тип запроса (нативный или JPQL)? Спасибо.

1 Ответ

1 голос
/ 04 марта 2012

Документация гласит:

Контекст постоянства не синхронизирован с результатом массового обновления или удаления.

При выполнении следует соблюдать осторожностьМассовое обновление или удаление операций, поскольку они могут привести к несоответствиям между базой данных и объектами в контексте активного постоянства.Как правило, массовые операции обновления и удаления должны выполняться только внутри транзакции в новом контексте персистентности или в начале транзакции (до того, как будут получены объекты, состояние которых может быть затронуто такими операциями).

Итак, поскольку OpenJPA не синхронизирует кэш L1, я не понимаю, почему он (и как мог бы) синхронизировать кэш L2.Он мог смыть это, но я сомневаюсь в этом.В любом случае, это достаточно просто проверить.

...