====== JPA Second Level Cache ====== * [[java:hibernate:cache|Hibernate Cache]] * Hibernate 4 기반으로 살펴보는 JPA2 Second Level Cache. * 아직까지 살펴본바로는, JPA 2의 [[http://docs.oracle.com/javaee/6/api/javax/persistence/Cacheable.html|@Cacheable]]애노테이션보다는 그냥 [[https://docs.jboss.org/hibernate/orm/4.2/javadocs/org/hibernate/annotations/Cache.html|@org.hibernate.annotations.Cache]]를 사용하고 쿼리 캐시 힌트로 hibernate 기반으로 사용하는게 나은 듯 하다. * 아래 나오는 Property Key의 대부분은 [[https://docs.jboss.org/hibernate/orm/4.2/javadocs/org/hibernate/cfg/Environment.html|Environment]] 클래스에 상수로 정의 돼 있다. ===== Evict All ===== 현재 Hibernate 구현체(4.3)은 JPA의 Cache.evictAll() 호출시에 모든 Region을 evict하지 않고 오로지 Entity 관련 region에 대해서만 evict를 수행한다. 전체 리젼을 다 evict하려면 Hibernate의 ''SessionFactory''의 ''Cache'' 구현체로 수행해야 한다. 관련 구현은 [[https://github.com/hibernate/hibernate-orm/blob/master/hibernate-entitymanager/src/main/java/org/hibernate/jpa/internal/EntityManagerFactoryImpl.java |EntityManagerFactoryImpl.java]]에 있다. // JPA 2.0사용시 HibernateEntityManagerFactory hemf = (HibernateEntityManagerFactory)entityManagerFactory; org.hibernate.Cache cache = hemf.getSessionFactory().getCache(); // JPA 2.1 사용시 SessionFactory sessionFactory = entityManagerFactory.unwrap(SessionFactory.class) org.hibernate.Cache cache = sessionFactory.getCache(); // 전체 eviction cache.evictEntityRegions(); cache.evictQueryRegions(); cache.evictCollectionRegions(); ===== 참고 ===== * [[http://www.developer.com/java/using-second-level-caching-in-a-jpa-application.html|Using Second Level Caching in a JPA Application - Developer.com]]