2013-11-03 103 views
0

任務的:讓春天JPA數據高速緩存的基本方法(使用Hibernate/JPA),像緩存默認春數據JPA方法

Page<T> findAll(Pageable pageable) 
List<T> findAll(); 
etc 

,並做它在某種頂級通用接口水平,沒有自定義DAO實現。

這是原來的話題延續 How to add QueryHints on Default Spring Data JPA Methods?

我還沒有發現仍然解決,但試圖用不同的方法來解決這個問題,包括添加註釋像 數據模型類@javax.persistence.Cacheable@org.hibernate.annotations.Cache


這裏是我的配置中的一些摘錄:

  1. 的pom.xml(從here拍攝):

    ... 
    <dependency> 
        <groupId>org.hibernate</groupId> 
        <artifactId>hibernate-ehcache</artifactId> 
        <version>4.1.9.Final</version> 
        <exclusions> 
         <exclusion> 
          <groupId>net.sf.ehcache</groupId> 
          <artifactId>ehcache-core</artifactId> 
         </exclusion> 
        </exclusions> 
    </dependency> 
    <dependency> 
        <groupId>net.sf.ehcache</groupId> 
        <artifactId>ehcache</artifactId> 
        <version>2.7.0</version> 
    </dependency> 
    ... 
    <dependency> 
        <groupId>org.springframework.data</groupId> 
        <artifactId>spring-data-jpa</artifactId> 
        <version>1.4.2.RELEASE</version> 
    </dependency> 
    ... 
    
  2. 的applicationContext.xml:

    <tx:annotation-driven mode="aspectj" transaction-manager="transactionManager"/> 
    <bean class="org.springframework.orm.jpa.JpaTransactionManager" id="transactionManager"> 
        <property name="entityManagerFactory" ref="entityManagerFactory"/> 
    </bean>  
    <bean class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" id="entityManagerFactory"> 
        <property name="persistenceUnitName" value="persistenceUnit"/> 
        <property name="dataSource" ref="dataSource"/> 
    </bean> 
    
  3. 周的persistence.xml:

    ... 
    <provider>org.hibernate.ejb.HibernatePersistence</provider> 
    <shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode> 
    <properties> 
        ... 
        <property name="hibernate.cache.region.factory_class" value="org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory"/> 
        <property name="hibernate.cache.use_second_level_cache" value="true"/> 
        <property name="hibernate.cache.use_query_cache" value="true" /> 
    </properties> 
    ... 
    
  4. 除了上述所有我已經配置彈簧3.2緩存,但最終我希望能有一個解決方案不是基於彈簧緩存,因此在現階段,我不使用彈簧緩存配置。

  5. 我的模型看起來像:

    @Entity 
    @Table(name = "ABC") 
    @Cacheable(true) 
    @Cache(usage = CacheConcurrencyStrategy.READ_WRITE) 
    public class ABC { 
    ... 
    
  6. 我的父母了通用的DAO的樣子:

    public interface CacheableGenericDao<T, ID> extends JpaRepository<T, ID>, JpaSpecificationExecutor<T> { 
        List<T> findAll(); 
        Page<T> findAll(Pageable pageable); 
        <S extends T> S save(S entity); 
        ... 
    

附:這裏有一個關於主題的更有用的link,但我確實需要使用基本的方法名稱。

那麼我在概念上缺少什麼?有沒有辦法,或者我想要太多?

回答