sql >> Database >  >> RDS >> Oracle

Wis de cache op het 2e niveau van de slaapstand na handmatige DB-update

Volgens Hibernate JavaDoc kunt u org.hibernate.Cache.evictAllRegions() gebruiken :

evictAllRegions() Verwijder alle gegevens uit de cache.

Sessie en SessionFactory gebruiken:

Session session = sessionFactory.getCurrentSession();

if (session != null) {
    session.clear(); // internal cache clear
}

Cache cache = sessionFactory.getCache();

if (cache != null) {
    cache.evictAllRegions(); // Evict data from all query regions.
}

1) Als u slechts één entiteit wilt bijwerken (als u rechtstreeks vanuit db alleen bepaalde entiteiten bijwerkt), niet de hele sessie, kunt u

evictEntityRegion(Class entityClass) Verwijdert alle entiteitsgegevens uit de gegeven regio (d.w.z.

2) Als je veel entiteiten hebt, die rechtstreeks vanuit db kunnen worden bijgewerkt, kun je deze methode gebruiken die alle entiteiten uit de cache van het 2e niveau verwijdert (we kunnen deze methode aan beheerders blootstellen via JMX of andere beheerderstools):

/**
 * Evicts all second level cache hibernate entites. This is generally only
 * needed when an external application modifies the game databaase.
 */
public void evict2ndLevelCache() {
    try {
        Map<String, ClassMetadata> classesMetadata = sessionFactory.getAllClassMetadata();
        Cache cache = sessionFactory.getCache();
        for (String entityName : classesMetadata.keySet()) {
            logger.info("Evicting Entity from 2nd level cache: " + entityName);
            cache.evictEntityRegion(entityName);
        }
    } catch (Exception e) {
        logger.logp(Level.SEVERE, "SessionController", "evict2ndLevelCache", "Error evicting 2nd level hibernate cache entities: ", e);
    }
}

3) Een andere benadering wordt hier beschreven voor postgresql+hibernate, ik denk dat je iets soortgelijks kunt doen voor Oracle zoals dit



  1. "Kan de trigger niet laten vallen" Fout bij het verwijderen van een aanmeldingstrigger? Probeer dit.

  2. Overgecompliceerde Oracle jdbc BLOB-afhandeling

  3. MySQL versus MySQLi bij gebruik van PHP

  4. MySQL auto-increment kolom springt met 10 waarom?