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

2022-09-01 08:40:20

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

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

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

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

我确信此log4j消息的缓存。

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

答案 1

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


答案 2

在新事务中执行读取。

例如:

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