문서의 선택한 두 판 사이의 차이를 보여줍니다.
양쪽 이전 판 이전 판 다음 판 | 이전 판 다음 판 양쪽 다음 판 | ||
java:jpa:cache [2014/06/08 01:07] kwon37xi |
java:jpa:cache [2015/03/17 01:13] kwon37xi |
||
---|---|---|---|
줄 4: | 줄 4: | ||
* 아래 나오는 Property Key의 대부분은 [[https:// | * 아래 나오는 Property Key의 대부분은 [[https:// | ||
- | ===== Hibernate Cache 활성화 | + | ===== Evict All ===== |
- | * [[java: | + | 현재 |
- | <code sh> | + | |
- | Map< | + | |
- | // hibernate.cache.use_second_level_cache | + | 전체 리젼을 다 evict하려면 Hibernate의 '' |
- | props.put(Environment.USE_SECOND_LEVEL_CACHE, | + | 관련 구현은 [[https://github.com/ |
+ | |EntityManagerFactoryImpl.java]]에 있다. | ||
- | // hibernate.cache.use_query_cache | ||
- | props.put(Environment.USE_QUERY_CACHE, | ||
- | |||
- | // hibernate.cache.region.factory_class - 캐시 구현체 지정 | ||
- | props.put(Environment.CACHE_REGION_FACTORY, | ||
- | |||
- | // hibernate.cache.region_prefix | ||
- | props.put(Environment.CACHE_REGION_PREFIX, | ||
- | |||
- | // hibernate.cache.default_cache_concurrency_strategy | ||
- | props.put(Environment.DEFAULT_CACHE_CONCURRENCY_STRATEGY, | ||
- | |||
- | // ... | ||
- | EntityManagerFactory emf = Persistence.createEntityManagerFactory(" | ||
- | </ | ||
- | |||
- | * JPA 캐시의 경우 원칙적으로 ''< | ||
- | ===== Entity Cache ===== | ||
- | * Entity는 update 쿼리 실행시 region의 expire가 발생한다. | ||
<code java> | <code java> | ||
- | @Entity | + | // JPA 2.0사용시 |
- | @Table(name = " | + | HibernateEntityManagerFactory hemf = (HibernateEntityManagerFactory)entityManagerFactory; |
- | @org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE, | + | org.hibernate.Cache cache = hemf.getSessionFactory().getCache(); |
- | public class Book implements Serializable { | + | |
- | .... | + | |
- | } | + | |
- | </ | + | |
- | + | ||
- | + | ||
- | ===== Query Cache ===== | + | |
- | * Query Cache는 기본적으로 region을 지정하지 않으면 '' | + | |
- | * query는 명시적 expire는 없고, entity가 수정될 경우 해당 entity의 update time stamp를 기반으로 쿼리를 다시 날릴지 아니면 캐시된 데이터를 사용할지 결정한다. | + | |
- | * query는 '' | + | |
- | * UpdateTimestampCache에 의해 query의 자동 expire가 이루어 지므로 굳이 Query에 대한 region을 따로 지정하지 않아도 된다. | + | |
- | * '' | + | |
- | TypedQuery< | + | |
- | query.setParameter(" | + | |
- | query.setHint("org.hibernate.cacheable", | + | // JPA 2.1 사용시 |
- | query.setHint(" | + | SessionFactory sessionFactory = entityManagerFactory.unwrap(SessionFactory.class) |
- | </ | + | org.hibernate.Cache cache = sessionFactory.getCache(); |
- | * '' | + | // 전체 eviction |
- | @Entity | + | cache.evictEntityRegions(); |
- | @Table(name = " | + | cache.evictQueryRegions(); |
- | @org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE, | + | cache.evictDefaultQueryRegion(); |
- | @NamedQuery(name = "Book.byEdition", | + | cache.evictCollectionRegions(); |
- | query = "from Book where edition=: | + | |
- | hints = { | + | |
- | @QueryHint(name = " | + | |
- | | + | |
- | } | + | |
- | ) | + | |
- | public class Book implements Serializable { | + | |
- | .... | + | |
- | } | + | |
</ | </ | ||