문서의 이전 판입니다!
Map<String,Object> props = new HashMap<String,Object>();
// hibernate.cache.use_second_level_cache
props.put(Environment.USE_SECOND_LEVEL_CACHE, true);
// hibernate.cache.use_query_cache
props.put(Environment.USE_QUERY_CACHE, true);
// hibernate.cache.region.factory_class - 캐시 구현체 지정
props.put(Environment.CACHE_REGION_FACTORY, CachingRegionFactory.class.getName());
// hibernate.cache.region_prefix
props.put(Environment.CACHE_REGION_PREFIX, "cachetest");
// hibernate.cache.default_cache_concurrency_strategy
props.put(Environment.DEFAULT_CACHE_CONCURRENCY_STRATEGY, CacheConcurrencyStrategy.READ_WRITE);
// ...
EntityManagerFactory emf = Persistence.createEntityManagerFactory("cachetest", props);
<shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode> 등의 shared-cache-mode 설정이 필요하지만, Hibernate Cache Annotaion과 Hint를 사용할 때는 상관없어보인다.@Entity @Table(name = "books") @org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE, region = "books") public class Book implements Serializable { .... }
org.hibernate.cache.internal.StandardQueryCache region에 캐시 결과를 저장한다.org.hibernate.cache.spi.UpdateTimestampsCache region을 통해 특정 Entity의 timestamp를 저장한다.setHint를 통해 캐시하도록 지정TypedQuery<Book> query = em.createNamedQuery("Book.byEdition", Book.class); query.setParameter("edition", 3); query.setHint("org.hibernate.cacheable", true); query.setHint("org.hibernate.cacheRegion", "book-by-edition"); // region 지정
NamedQuery에 지정@Entity @Table(name = "books") @org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE, region = "books") @NamedQuery(name = "Book.byEdition", query = "from Book where edition=:edition", hints = { @QueryHint(name = "org.hibernate.cacheable", value = "true"), @QueryHint(name = "org.hibernate.cacheRegion", value = "book-by-edition") } ) public class Book implements Serializable { .... }