2015-09-08 5 views
0

Я использую Spring версии 4.1.1 и hibernate версии 4.3.7, я использую аннотации для сопоставления с базой данных. Теперь я хочу интегрировать кеш второго уровня Hibernate.Spring + Hibernate ehcache кеш второго уровня

<props> 
     <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> 
     <prop key="hibernate.current_session_context_class">org.springframework.orm.hibernate4.SpringSessionContext 
     </prop> 
     <prop key="hibernate.show_sql">false</prop> 
     <prop key="hibernate.hbm2ddl.auto">update</prop> 


    </props> 

Я использую Hibernate зависимость

<dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-entitymanager</artifactId> 
     <version>4.3.7.Final</version> 
    </dependency> 

И это мой класс файл, в котором я запрашивая

@Entity 
@Table(name = "assets") 
public class Assets { 

@Id 
@Column(name = "assetID") 
private Integer assetID; 

@Column(name = "assetName") 
private String assetName; 
} 

и окончательный запрос спящего режима является

sessionFactory.getCurrentSession() 
      .createQuery("from Assets").setCacheable(true).list(); 

Скажите, пожалуйста, как t o сделайте это. Заранее спасибо.

ответ

2

Вам нужно настроить кэш второго уровня в вашем файле конфигурации яровой

<prop key="hibernate.cache.use_second_level_cache">true</prop> 
<prop key="hibernate.cache.use_query_cache">true</prop> 
<prop key="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</prop> 

Вы должны аннотировать объект, даже если вы используете кэш запросов только потому, что запасы результатов в кэше второго уровня.

@Entity 
@Table(name = "assets") 
@Cacheable @Cache(usage = CacheConcurrencyStrategy.READ_WRITE) 
public class Assets { 
.... 
} 

Вы должны также иметь файл XML для настройки кэша области (ehcache.xml), здесь кэш по умолчанию конфигурации область for more details:

<ehcache> 
    <diskStore path="java.io.tmpdir"/> 
    <defaultCache 
     maxEntriesLocalHeap="10000" 
     eternal="false" 
     timeToIdleSeconds="120" 
     timeToLiveSeconds="120" 
     maxEntriesLocalDisk="10000000" 
     diskExpiryThreadIntervalSeconds="120" 
     memoryStoreEvictionPolicy="LRU"> 
     <persistence strategy="localTempSwap"/> 
    </defaultCache> 
</ehcache> 

Обновление:

Это работает me:

<!-- EHCache-Hibernate --> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-ehcache</artifactId> 
     <version>4.3.8.Final</version> 
    </dependency> 
    <dependency> 
     <groupId>net.sf.ehcache</groupId> 
     <artifactId>ehcache-core</artifactId> 
     <version>2.6.9</version> 
    </dependency> 
+0

Благодарим вас за ответ, но когда я включаю это с помощью Spring framework, It не распознает ehcache, поэтому, пожалуйста, скажите мне банки или место XMLNS для этого. –

+0

Я обновил свой ответ с помощью зависимостей maven. –

Смежные вопросы