При вызове EntityManager.flush () он также сбрасывает второй кэш? - PullRequest
7 голосов
/ 18 января 2012

При вызове EntityManager.flush () он также очистит кэш второго уровня? Я попробовал поискать в Google, и я также попытался очистить его, и похоже, что это так, но было бы хорошо, чтобы это подтвердили.

Редактировать: теперь не похоже, что он очищает кэш второго уровня.

Ответы [ 2 ]

1 голос
/ 18 января 2012

JPA не имеет понятия о кеше второго уровня (он не является частью спецификации). Таким образом, поведение кэша второго уровня полностью зависит от поставщика JPA. Что вы используете Hibernate, EclipseLink, OpenJPA?

Обновление: я частично исправлен, JPA 2.0 предлагает несколько опций для управления использованием кэша второго уровня (например, @ Cachable )

0 голосов
/ 18 января 2012

Кэш L2 должен (по умолчанию, в любой разумной реализации JPA) обновляться при фиксации , а не flush, но это не обязательно в спецификации JPA2, так что вы переходите к особенностям реализации. DataNucleus, конечно, только обновляет его при коммите. Если кэш L2 обновлялся при сбросе, а затем изменения этих объектов откатывались, это приводит к потенциальному считыванию неверных / непостоянных данных. Некоторые могут допустить это как вариант.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...