タスク: 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
。
ここに私の設定の抜粋があります:
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> ...
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>
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> ...
上記のすべてとは別に、Spring 3.2キャッシュを構成しましたが、最終的にはSpringキャッシュに基づいていないソリューションが必要なため、現時点ではSpringキャッシュ構成を使用していません.
私のモデルは次のようになります。
@Entity @Table(name = "ABC") @Cacheable(true) @Cache(usage = CacheConcurrencyStrategy.READ_WRITE) public class ABC { ...
親のジェネリック 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つの便利なリンクがありますが、基本的なメソッド名を使用したいと思います。
では、概念的に何が欠けているのでしょうか? アプローチはまったくありますか、それともやりすぎですか?