强制 Hibernate 读取数据库而不返回缓存的实体

新手上路,请多包涵

我正在为我的 Web 应用程序使用 Hibernate 和 Spring。

在数据库操作中,Hibernate 缓存实体并在下一个请求中返回它们,而不读取实际的数据库。我知道这会减少数据库的负载并提高性能。

但是虽然这个应用程序仍在建设中,但我需要在每个请求中从数据库加载数据(测试原因)。

有没有办法强制读取数据库?

我从这个 log4j 消息中确定了缓存。

 Returning cached instance of singleton bean 'HelloController'
DEBUG [http-bio-8080-exec-42] - Last-Modified value for [/myApp/../somePageId.html] is: -1

原文由 Saif 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 436
2 个回答

session.refresh(entity)entityManager.refresh(entity) (如果您使用 JPA)将为您提供来自数据库的新数据。

原文由 Predrag Maric 发布,翻译遵循 CC BY-SA 3.0 许可协议

在新事务中进行读取。

例如:

 ...
MyDTO myDTO = fetchMyDTOById(daoId);
...
@Transactional(readOnly = true, propagation = Propagation.REQUIRES_NEW)
private MyDTO fetchMyDTOById(Long dtoId) {
    return repository.findById(dtoId);
}

原文由 wild_nothing 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题