通过entityManager.refresh刷新实体的集合(getResultList)

时间:2010-07-08 14:24:28

标签: java jpa

如何在启用JPA缓存时刷新getResultList实体集合。 我的意思是:

列出customers = query.getResultList();

????? > em.refresh(客户)! //我需要刷新,因为缓存已启用。

RGDS 纳维德

2 个答案:

答案 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框架。