web-dev-qa-db-fra.com

Forcer Hibernate à lire la base de données et à ne pas retourner l'entité mise en cache

J'utilise Hibernate et Spring pour mon application Web.

En mode base de données, Hibernate met en cache des entités et les renvoie dans la requête suivante sans lire la base de données. Je sais que cela réduira la charge de la base de données et améliorera les performances. 

Mais alors que cette application est encore en construction, je dois charger des données de la base de données à chaque demande (raison du test).

Est-il possible de forcer la base de données à lire?

Je suis devenu sûr de la mise en cache de ce message log4j.

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

session.refresh(entity) ou entityManager.refresh(entity) (si vous utilisez JPA) vous donnera de nouvelles données à partir de DB.

13
Predrag Maric

Faites la lecture dans une nouvelle transaction.

Par exemple:

...
MyDTO myDTO = fetchMyDTOById(daoId);
...
@Transactional(readOnly = true, propagation = Propagation.REQUIRES_NEW)
private MyDTO fetchMyDTOById(Long dtoId) {
    return repository.findById(dtoId);
}
9
wild_nothing
  • Entité d'actualisation d'appel session.refresh(entity)

    ou

  • Ouvrez une nouvelle session puis appelez session2.get(EntityClass.class,id). L'entité sera extraite de la base de données 

        Session session2=sessionFactory.openSession();                  
        EntityClass entity=(EntityClass) session2.get(EntityClass.class, id);
    
0
Hatem Badawi

Commentez simplement l'annotation @EnableCaching de votre classe de configuration pour désactiver la mise en cache, même si d'autres annotations de cache existent toujours. Et vous pouvez le commenter à tout moment si vous souhaitez activer le cache.

0
Bilal Ahmed Yaseen