Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Wyczyść pamięć podręczną drugiego poziomu hibernacji po ręcznej aktualizacji bazy danych

Według Hibernate JavaDoc, możesz użyć org.hibernate.Cache.evictAllRegions() :

evictAllRegions() Usuń wszystkie dane z pamięci podręcznej.

Korzystanie z sesji i SessionFactory:

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) Jeśli potrzebujesz zaktualizować tylko jedną encję (jeśli bezpośrednio z bazy danych zaktualizujesz tylko niektóre encje), a nie całą sesję, możesz użyć

evictEntityRegion(Class entityClass) Eksmituje wszystkie dane encji z danego regionu (np.

2) Jeśli masz dużo encji, które można zaktualizować bezpośrednio z bazy danych, możesz użyć tej metody, która eksmituje wszystkie encje z pamięci podręcznej drugiego poziomu (możemy udostępnić tę metodę administratorom za pomocą JMX lub innych narzędzi administracyjnych):

/**
 * 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) Inne podejście jest opisane tutaj dla postgresql+hibernate, myślę, że możesz zrobić coś podobnego dla Oracle w ten sposób



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak sformatować zapytania Oracle, aby kolumny się nie zawijały?

  2. Jaka jest różnica między precyzją a skalą?

  3. Jak dodać 10 sekund w current_timestamp SQL ( Oracle )

  4. jak odzyskać zapasową bazę danych z brakującego dziennika archiwum?

  5. SSIS nie może zapisać pakietów i ponownie uruchamia program Visual Studio