문서의 선택한 두 판 사이의 차이를 보여줍니다.
양쪽 이전 판 이전 판 다음 판 | 이전 판 | ||
java:hibernate:cache [2014/07/04 13:11] kwon37xi [Entity Collection Cache] |
java:hibernate:cache [2018/09/13 14:28] (현재) kwon37xi |
||
---|---|---|---|
줄 6: | 줄 6: | ||
* Memcached임에도 Region(namespace) 지원 | * Memcached임에도 Region(namespace) 지원 | ||
* [[https:// | * [[https:// | ||
+ | |||
+ | ===== Hibernate의 기본 캐시 전략 ===== | ||
+ | * Memcached 등의 외부 서버보다는 로컬 JVM에서 값을 즉시 읽을 수 있는 [[java: | ||
+ | * [[http:// | ||
+ | * 기본적으로 Replication-Invalidation 전략을 사용한다. | ||
+ | * [[java: | ||
+ | * Entity와 컬렉션은 '' | ||
+ | * '' | ||
+ | * '' | ||
===== Cuncurrency Strategy ===== | ===== Cuncurrency Strategy ===== | ||
줄 21: | 줄 30: | ||
* '' | * '' | ||
* 최초 데이터 가져온 후 캐시 생성 | * 최초 데이터 가져온 후 캐시 생성 | ||
- | * '' | + | * '' |
* 입력 : '' | * 입력 : '' | ||
* 수정 - 예외를 발생시켜야 한다. | * 수정 - 예외를 발생시켜야 한다. | ||
줄 140: | 줄 149: | ||
===== Entity Collection Cache ===== | ===== Entity Collection Cache ===== | ||
+ | ==== 기본 ==== | ||
+ | |||
엔티티의 컬렉션을 캐시하려면 해당 컬렉션에 '' | 엔티티의 컬렉션을 캐시하려면 해당 컬렉션에 '' | ||
<code java> | <code java> | ||
줄 150: | 줄 161: | ||
</ | </ | ||
- | 양방향 관계의 경우 명시적으로 Collection 쪽에 수정이 발생해야만 캐시가 갱신된다. | + | 양방향 관계의 경우 |
+ | |||
+ | ==== OneToOne not owning size ==== | ||
+ | * OneToOne 관계의 not owning side(mappedBy를 명시한 부모측)에는 캐시가 걸리지 않는 것으로 보인다.[[https:// | ||
===== Query Cache ===== | ===== Query Cache ===== | ||
줄 160: | 줄 175: | ||
TypedQuery< | TypedQuery< | ||
query.setParameter(" | query.setParameter(" | ||
- | |||
query.setHint(" | query.setHint(" | ||
+ | query.setHint(" | ||
query.setHint(" | query.setHint(" | ||
</ | </ | ||
줄 192: | 줄 207: | ||
} | } | ||
</ | </ | ||
+ | |||
+ | ===== Evict All ===== | ||
+ | 현재 Hibernate는 모든 리젼(Region)을 '' | ||
+ | <code java> | ||
+ | org.hibernate.Cache cache = sessionFactory.getCache(); | ||
+ | cache.evictEntityRegions(); | ||
+ | cache.evictQueryRegions(); | ||
+ | cache.evictDefaultQueryRegion(); | ||
+ | cache.evictCollectionRegions(); | ||
+ | </ | ||
+ | |||
+ | ===== Cache 관련 Properties ===== | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | |||
+ | ===== Query 실행 후 Entity Cache 갱신 문제 ===== | ||
+ | * PK 기반 쿼리는 Cache에서 (있으면) 값을 가져오고, | ||
+ | * 하지만 Query 실행시에는 (Query Cache 가 꺼져 있으면) 쿼리 결과 Entity들을 다시 Cache에 넣는 일을 한다('' | ||
+ | * '' | ||
+ | * 하지만 '' | ||
+ | * | ||
+ | |||
===== 참조문서 ===== | ===== 참조문서 ===== | ||
* [[http:// | * [[http:// | ||
줄 199: | 줄 237: | ||
* [[http:// | * [[http:// | ||
* [[http:// | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[https:// |