Force Hibernate to read database and not return ca

2020-02-26 21:45发布

I am using Hibernate and Spring for my web application.

In database operation, Hibernate is caching entities and returning them in next request without reading the actual database. I know this will reduce the load on database and improve performance.

But while this app still under construction, I need to load data from database in every request (testing reason).

Is there any way to force database read?

I became sure about the caching from this log4j message.

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

3条回答
戒情不戒烟
2楼-- · 2020-02-26 22:09

Do the read within a new transaction.

For example:

...
MyDTO myDTO = fetchMyDTOById(daoId);
...
@Transactional(readOnly = true, propagation = Propagation.REQUIRES_NEW)
private MyDTO fetchMyDTOById(Long dtoId) {
    return repository.findById(dtoId);
}
查看更多
仙女界的扛把子
3楼-- · 2020-02-26 22:20

session.refresh(entity) or entityManager.refresh(entity) (if you use JPA) will give you fresh data from DB.

查看更多
【Aperson】
4楼-- · 2020-02-26 22:27
  • Call refresh entity session.refresh(entity)

    or

  • Open new session then call session2.get(EntityClass.class,id) it will pull the entity from the database

        Session session2=sessionFactory.openSession();                  
        EntityClass entity=(EntityClass) session2.get(EntityClass.class, id);
    
查看更多
登录 后发表回答