webentwicklung-frage-antwort-db.com.de

Erzwingen Sie den Ruhezustand, um die Datenbank zu lesen und keine zwischengespeicherte Entität zurückzugeben

Ich verwende Hibernate und Spring für meine Webanwendung.

Im Datenbankbetrieb speichert Hibernate Entitäten und gibt sie bei der nächsten Anforderung zurück, ohne die tatsächliche Datenbank zu lesen. Ich weiß, dass dies die Datenbankbelastung reduzieren und die Leistung verbessern wird. 

Aber während sich diese App noch im Aufbau befindet, muss ich bei jeder Anforderung Daten aus der Datenbank laden (Testgrund).

Gibt es eine Möglichkeit, das Lesen der Datenbank zu erzwingen?

Ich bin mir wegen der Zwischenspeicherung dieser log4j-Nachricht sicher.

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) oder entityManager.refresh(entity) (wenn Sie JPA verwenden) liefern Ihnen neue Daten aus der Datenbank.

13
Predrag Maric

Lesen Sie den Vorgang innerhalb einer neuen Transaktion.

Zum Beispiel:

...
MyDTO myDTO = fetchMyDTOById(daoId);
...
@Transactional(readOnly = true, propagation = Propagation.REQUIRES_NEW)
private MyDTO fetchMyDTOById(Long dtoId) {
    return repository.findById(dtoId);
}
9
wild_nothing
  • Aufruf der Aktualisierungsentität session.refresh(entity)

    oder

  • Neue Sitzung öffnen und dann session2.get(EntityClass.class,id) aufrufen. Die Entität wird aus der Datenbank abgerufen 

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

Kommentieren Sie einfach die @EnableCaching-Annotation aus Ihrer Konfigurationsklasse, um das Caching zu deaktivieren, obwohl andere Cache-Annotationen noch vorhanden sind. Und Sie können es jederzeit kommentieren, wenn Sie den Cache aktivieren möchten.

0