sql >> データベース >  >> RDS >> Oracle

手動でDBを更新した後、Hibernateの第2レベルのキャッシュをクリアします

    Hibernate JavaDocによると、org.hibernate.Cache.evictAllRegions()を使用できます。 :

    evictAllRegions()キャッシュからすべてのデータを削除します。

    Sessionと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)セッション全体ではなく、1つのエンティティのみを更新する必要がある場合(dbから直接更新する場合は、特定のエンティティのみを更新します)、使用できます

    evictEntityRegion(Class entityClass)指定されたリージョン(つまり

    )からすべてのエンティティデータを削除します

    2)dbから直接更新できるエンティティが多数ある場合は、このメソッドを使用して、すべてのエンティティを第2レベルのキャッシュから削除できます(このメソッドは、JMXまたは他の管理ツールを介して管理者に公開できます):

    /**
     * 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)postgresql + hibernateの別のアプローチについてここで説明します。このように、Oracleでも同様のことができると思います



    1. ARMベースのDebianデバイス用のOracleInstantClient

    2. ユーザーアカウントの管理、役割、権限、認証PHPおよびMySQL

    3. SQL * Plusプロンプトからテキスト変数を受け入れる方法は?

    4. SQLサーバーでyes/noブールフィールドをどのように作成しますか?