0

タスク: spring jpa データの基本的なメソッドを (hibernate/jpa を使用して) キャッシュ可能にします。

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

カスタムdao実装なしで、ある種のトップジェネリックインターフェースレベルでそれを行います。

これは元のトピックの続きです デフォルトの Spring Data JPA メソッドに QueryHints を追加する方法は?

私はまだ解決策を見つけていませんが、データモデルクラスのような注釈を追加するなど、さまざまな方法で解決しようとしまし @javax.persistence.Cacheable@org.hibernate.annotations.Cache


ここに私の設定の抜粋があります:

  1. pom.xml (ここから取得):

    ...
    <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. 上記のすべてとは別に、Spring 3.2キャッシュを構成しましたが、最終的にはSpringキャッシュに基づいていないソリューションが必要なため、現時点ではSpringキャッシュ構成を使用していません.

  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);
        ...
    

PSここにトピックに関するもう1つの便利なリンクがありますが、基本的なメソッド名を使用したいと思います。

では、概念的に何が欠けているのでしょうか? アプローチはまったくありますか、それともやりすぎですか?

4

1 に答える 1