문서의 이전 판입니다!
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에 캐시 결과를 저장한다.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 { .... }
org.hibernate.cache.internal.StandardQueryCache
region을 사용한다.org.hibernate.cache.spi.UpdateTimestampsCache
region을 통해 특정 Entity의 timestamp를 저장한다.