首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EntityManager刷新

EntityManager刷新
EN

Stack Overflow用户
提问于 2011-04-29 13:04:25
回答 6查看 65K关注 0票数 32

我有使用JPA的web应用程序。这个实体管理器保存了大量的实体,然后我突然从另一边更新了数据库。我使用MySQL,使用PhpMyAdmin并更改某些行。

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

我知道有refresh(Object)方法,但是有没有可能做refreshAll()或者什么结果呢?

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

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-04-29 13:22:36

代码语言:javascript
复制
entityManager.getEntityManagerFactory().getCache().evictAll()

Refresh是不同的,因为它修改了对象。这一行只是empty the cache,所以如果您获取在实体管理器之外更改的对象,它将执行实际的数据库查询,而不是使用过时的cached值。

票数 44
EN

Stack Overflow用户

发布于 2012-04-06 14:42:07

我也有过类似的问题,上面的evictAll()线对我来说很管用。

或者,实体类上的@Cache注释也有效,其好处是能够控制缓存参数:

代码语言:javascript
复制
@Cache(coordinationType=CacheCoordinationType.INVALIDATE_CHANGED_OBJECTS)

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

票数 8
EN

Stack Overflow用户

发布于 2017-03-29 12:42:50

如果您使用的是EclipseLink而不是Hibernate,提示如下:

代码语言:javascript
复制
em.createNamedQuery("SomeEntity.SomeNamedQuery")
.setHint(QueryHints.REFRESH, true)
.getResultList();
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5832415

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档