Обновление коллекции (getResultList) сущностей с помощью entityManager.refresh - PullRequest
0 голосов
/ 08 июля 2010

Как обновить коллекцию сущностей getResultList, когда включен кеш JPA. Я имею в виду:

Список клиентов = query.getResultList ();

????? > em.refresh (клиенты)! // мне нужно обновить, потому что кеш включен.

УВАЖЕНИЕ Навид

Ответы [ 2 ]

5 голосов
/ 09 июля 2010

В JPA 2.0 может быть проще полностью пропустить кэш L2, используя подсказку запроса.Например:

Query query = em.createQuery(...); 
query.setHint("javax.persistence.cache.retrieveMode", "BYPASS"); // skip the L2 cache.
List customers = query.getResultList();

Это не доступно в JPA 1.0, хотя.Если вы используете JPA 1.0, возможно, вам придется использовать API конкретного поставщика.Я полагаю, что Hibernate предоставляет нечто похожее на подсказку JPA 2.0 (другие провайдеры также могут иметь этот механизм).В OpenJPA есть метод refreshAll (Collection c) , который также должен работать для вас, и я подозреваю, что у других поставщиков есть что-то подобное.EclipseLink, похоже, не имеет, хотя.

3 голосов
/ 08 июля 2010

Перед вызовом em.refresh () вы должны очистить кеш с помощью em.getEntityManagerFactory (). GetCache (). EvictAll ();

Это новая функция в JPA2, поэтому вы, вероятно, должны обновить свою среду ORM.

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