Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Hapus cache level 2 Hibernate setelah pembaruan DB secara manual

Menurut Hibernate JavaDoc, Anda dapat menggunakan org.hibernate.Cache.evictAllRegions() :

evictAllRegions() Mengusir semua data dari cache.

Menggunakan Session dan 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) Jika Anda hanya perlu memperbarui satu entitas (jika langsung dari db Anda hanya akan memperbarui entitas tertentu) tidak seluruh sesi, Anda dapat menggunakan

evictEntityRegion(Class entityClass) Mengusir semua data entitas dari wilayah tertentu (yaitu

2) Jika Anda memiliki banyak entitas, yang dapat diperbarui langsung dari db, Anda dapat menggunakan metode ini yang menghapus semua entitas dari cache level 2 (kami dapat memaparkan metode ini kepada admin melalui JMX atau alat admin lainnya):

/**
 * 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) Pendekatan lain dijelaskan di sini untuk postgresql+hibernate, saya pikir Anda dapat melakukan sesuatu yang serupa untuk Oracle seperti ini



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kueri nama kolom dari tabel dari pengguna lain

  2. customer.pk_name bergabung dengan transaction.fk_name vs. customer.pk_id [serial] bergabung dengan transaction.fk_id [integer]

  3. Oracle:Kinerja Kumpulkan Massal

  4. Mengapa Oracle 9i memperlakukan string kosong sebagai NULL?

  5. Bagaimana menjalankan prosedur tersimpan di pengembang Oracle sql?