В 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, похоже, не имеет этого.
Не могли бы вы упомянуть поставщика, которого вы используете, и как включен кеш (я думаю, это вопрос с JPA 2.0, но обычно помогает контекстная информация)? Собственно, не могли бы вы прояснить весь вопрос и отформатировать его соответствующим образом (я даже не понимаю, что вы пытаетесь показать)? В чем проблема, которую вы пытаетесь решить? Зачем вам «обновлять» что-то? –
Я использую eclipselink, glassfish v3, JPA 2.0 (я думаю, как обеспечить версию JPA) – Nav
У меня есть два объекта, такие как Customer and Orders, у каждого клиента есть много заказов, поэтому я создал отношения @OneToMany и @ManyToOne между ними, поэтому, когда я нахожу объект клиента em.find(), заказы не обновляют и не поступают из кеша, но iam вызывает em.refresh (клиент), но кажется, что эта команда не обновляет заказы клиента. – Nav