当前位置:  开发笔记 > 编程语言 > 正文

操作Hibernate二级缓存

如何解决《操作Hibernate二级缓存》经验,为你挑选了1个好方法。

我使用hibernate作为我的ORM解决方案,使用EHCache作为二级(读写)缓存.

我的问题是:是否可以直接访问二级缓存?

我想访问这个:http://www.hibernate.org/hib_docs/v3/api/org/hibernate/cache/ReadWriteCache.html

如何访问Hibernate正在使用的相同ReadWriteCache?

我有一些我正在做的直接/自定义JDBC插入,我想自己将这些对象添加到二级缓存中.



1> Matt Sidesin..:

我会在映射到您的实体的EntityPersister上调用"afterInsert",因为Read/Write是一种异步并发策略.在查看Hibernate 3.3源代码后,我将它拼凑在一起.我不是百分之百,这会起作用,但它对我来说很好看.

EntityPersister persister = ((SessionFactoryImpl) session.getSessionFactory()).getEntityPersister("theNameOfYourEntity");

if (persister.hasCache() && 
    !persister.isCacheInvalidationRequired() && 
    session.getCacheMode().isPutEnabled()) {

    CacheKey ck = new CacheKey( 
                    theEntityToBeCached.getId(), 
                    persister.getIdentifierType(), 
                    persister.getRootEntityName(), 
                    session.getEntityMode(), 
                    session.getFactory() 
                );

    persister.getCacheAccessStrategy().afterInsert(ck, theEntityToBeCached, null);
}

-

/**
 * Called after an item has been inserted (after the transaction completes),
 * instead of calling release().
 * This method is used by "asynchronous" concurrency strategies.
 *
 * @param key The item key
 * @param value The item
 * @param version The item's version value
 * @return Were the contents of the cache actual changed by this operation?
 * @throws CacheException Propogated from underlying {@link org.hibernate.cache.Region}
 */
public boolean afterInsert(Object key, Object value, Object version) throws CacheException;

推荐阅读
mobiledu2402851377
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有