Hibernate cache 에 대해서. 그리고 merge, refresh
우선 Hibernate 는 1차, 2차 cache 를 제공한다.
1차는 기본적으로 default enabled 되어 있다. 임의로 disable 시킬 수 없다. session 별로 caching 이 유지되며, session 이 close 되면 이에 따라 cache 정보도 날라간다.
2차는 기본적으로 disabled 되어 있다. sessionFactory 단위의 caching 이기때문에 모든 session 에 적용이 된다. Hiberante 자체에서 제공하는게 아니고, ehcache 등 제 3의 memory cache 를 provide 해줘야 하는 모양이다.
그럼 DB 에 임의 로 접근해서 정보를 바꾸거나 지워버리면, Hibernate cache는 어떻게 될까? 이 외부적인 요인에 의한 변경을, hibernate 가 알 방법은 없다. 그렇기 때문에 cache 가 업데이트 되지않는다. merge 혹은 refresh 를 해줘야 하는데,
merge : 현재 session entity 가 가지고 있는 데이터를 DB 에 쓴다.
refresh : 현재 DB 에 있는 정보를 session entity 로 가지고 온다.
혹은 기존 session 들에 대해서 아래와 같이 evict 를 호출함으로써, entity 가 다시 불려질때 query 를 통해 최신 정보를 가져오게 할 수있다.
org.hibernate.Cache.evictAllRegions()
참조링크
https://howtodoinjava.com/hibernate/understanding-hibernate-first-level-cache-with-example/
https://stackoverflow.com/questions/2461063/how-to-clear-all-hibernate-cache-ehcache-using-spring
Comments
Post a Comment