如何在启用JPA缓存时刷新getResultList实体集合。 我的意思是:
列出customers = query.getResultList();
????? > em.refresh(客户)! //我需要刷新,因为缓存已启用。
RGDS 纳维德
答案 0 :(得分:5)
在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似乎没有。
答案 1 :(得分:3)
在调用em.refresh()之前,您应该使用em.getEntityManagerFactory()清除缓存.getCache()。evictAll();
这是JPA2中的一项新功能,因此您必须更新ORM框架。