Hibernateでehcacheを使用して二次キャッシュを管理する
EhCacheは純粋なJAVAプログラムであり,Hibernateにプラグインとして導入できる.HibernateでEhCacheを使用するには、Hibernateのプロファイルで次のように設定する必要があります.
true org.hibernate.cache.EhCacheProvider true
设置EhCache,建立配置文件ehcache.xml,默认的位置在class-path,可以放到你的src目录下:
<?xml version="1.0" encoding="UTF-8"?> <ehcache> <diskStore path="c:\\cache"/> <!-- cache.data --> <defaultCache maxElementsInMemory="10000" <!-- --> eternal="false" <!-- --> overflowToDisk="true" <!-- , --> timeToIdleSeconds="300" <!-- n --> timeToLiveSeconds="180" <!-- n --> diskPersistent="false" diskExpiryThreadIntervalSeconds= "120"/> <!-- --> </ehcache>
注意eternal=「true」の場合
timeToIdleSeconds、timeToLiveSeconds、diskExpiryThreadIntervalSecondsは無効です.
キャッシュは有効になっていますが、使用されていません.すべてのエンティティを自動的にキャッシュするのではなく、キャッシュする必要があるエンティティとキャッシュするポリシーを手動で指定する必要があります.キャッシュを使用するエンティティ・クラスを指定するには、2つの方法があります.
1つ目は、キャッシュを使用するエンティティのマッピングファイルを変更することです.User.hbm.xmlでラベルを使用して有効にします.
<hibernate-mapping> <class name="cn.ineeke.entity.User" table="t_user"> <cache usage="read- write "/> <id name="id"> <generator class="native"/> </id> <property name="name"/> </class> </hibernate-mapping>
2つ目の方法は、hibernate.cfg.xmlでラベルを使用してエンティティクラスを指定し、有効にすることです.
クエリー・キャッシュが必要な場合は、QueryまたはCriteria()を使用するときにsetCacheable(true)を設定する必要があります.ツールバーの
Session s=HibernateSessionFactory.getSession(); Criteria c=s.createCriteria(Resources.class); c.setCacheable(true); List l=c.list(); …… log 4 j.propertiesファイル#を構成すると、ehcacheの操作プロセスが表示されやすくなります.主にデバッグプロセスに使用されます.実際のアプリケーションがリリースされるときは、パフォーマンスに影響を与えないようにコメントしてください.log4j.logger.org.hibernate.cache=debug