Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Xóa bộ nhớ cache cấp 2 ở chế độ Hibernate sau khi cập nhật DB theo cách thủ công

Theo Hibernate JavaDoc, bạn có thể sử dụng org.hibernate.Cache.evictAllRegions() :

evictAllRegions () Xóa tất cả dữ liệu khỏi bộ nhớ đệm.

Sử dụng Session và 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) Nếu bạn chỉ cần cập nhật một thực thể (nếu trực tiếp từ db, bạn sẽ chỉ cập nhật một số thực thể nhất định) không phải toàn bộ phiên, bạn có thể sử dụng

evictEntityRegion (Lớp entityClass) Loại bỏ tất cả dữ liệu thực thể khỏi vùng đã cho (tức là

2) Nếu bạn có nhiều thực thể, có thể được cập nhật trực tiếp từ db, bạn có thể sử dụng phương pháp này để loại bỏ tất cả các thực thể khỏi bộ nhớ cache cấp 2 (chúng tôi có thể hiển thị phương pháp này cho quản trị viên thông qua JMX hoặc các công cụ quản trị khác):

/**
 * 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) Một cách tiếp cận khác được mô tả ở đây cho postgresql + hibernate, tôi nghĩ bạn có thể làm điều gì đó tương tự cho Oracle như thế này



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tương đương với bảng Oracle Dual trong MS SqlServer là gì?

  2. Sử dụng hàm to_date của Oracle cho chuỗi ngày với mili giây

  3. Làm thế nào để lấy cột khóa chính trong Oracle?

  4. Cách PLAY_SOUND trong Oracle Forms

  5. Làm thế nào để kiểm tra xem giá trị DataReader không phải là null hay không?