我有使用JPA的web应用程序。这个实体管理器保存了大量的实体,然后我突然从另一边更新了数据库。我使用MySQL,使用PhpMyAdmin并更改某些行。
如何告诉实体管理器重新同步,例如忘记缓存中的所有实体?
我知道有refresh(Object)方法,但是有没有可能做refreshAll()或者什么结果呢?
它肯定这是昂贵的操作,但如果必须这样做。
发布于 2011-04-29 13:22:36
entityManager.getEntityManagerFactory().getCache().evictAll()Refresh是不同的,因为它修改了对象。这一行只是empty the cache,所以如果您获取在实体管理器之外更改的对象,它将执行实际的数据库查询,而不是使用过时的cached值。
发布于 2012-04-06 14:42:07
我也有过类似的问题,上面的evictAll()线对我来说很管用。
或者,实体类上的@Cache注释也有效,其好处是能够控制缓存参数:
@Cache(coordinationType=CacheCoordinationType.INVALIDATE_CHANGED_OBJECTS)请参阅:http://wiki.eclipse.org/EclipseLink/Examples/JPA/Caching
发布于 2017-03-29 12:42:50
如果您使用的是EclipseLink而不是Hibernate,提示如下:
em.createNamedQuery("SomeEntity.SomeNamedQuery")
.setHint(QueryHints.REFRESH, true)
.getResultList();https://stackoverflow.com/questions/5832415
复制相似问题