实体管理器刷新

2022-09-01 10:32:28

我有使用JPA的Web应用程序。这个实体管理器保留了一堆entites,突然我从另一边更新数据库。我使用MySQL,我使用PhpMyAdmin并更改一些行。

如何告诉实体经理重新同步,例如忘记缓存中的所有entites?

我知道有方法,但是有没有可能怎么做或什么导致这种情况?refresh(Object)refreshAll()

可以肯定的是,这是昂贵的操作,但如果必须这样做。


答案 1
entityManager.getEntityManagerFactory().getCache().evictAll()

Refresh是不同的东西,因为它修改了你的对象。此行将正好 ,因此,如果您获取在实体管理器外部更改的对象,它将执行实际的数据库查询,而不是使用过时的值。empty the cachecached


答案 2

我遇到了类似的问题,上面的行对我有用。evictAll()

或者,实体类上的注释也可以工作,其优点是能够控制缓存参数:@Cache

@Cache(coordinationType=CacheCoordinationType.INVALIDATE_CHANGED_OBJECTS)

请参见: http://wiki.eclipse.org/EclipseLink/Examples/JPA/Caching


推荐