2013-11-11 2 views
2

Я начал изучать кеш второго уровня Hibernate.Как спящий кеш второго уровня работает внутри?

Я попытался использовать следующий пример кода для понимания кэша второго уровня Hibernate.

Session session = sessionFactory.openSession(); 
session.beginTransaction(); 
UserDetails u1 = (UserDetails) session.get(UserDetails.class,1); 
session.getTransaction().commit(); 
session.close(); 
Session session2=sessionFactory.openSession(); 
session2.beginTransaction(); 
UserDetails u2 = (UserDetails) session2.get(UserDetails.class, 1); 
session2.getTransaction().commit(); 
System.out.println(u1==u2); 
session2.close(); 

Я читаю тот же объект UserDetails (с '1' как id) в 2 разных сеансах. Он должен вернуть тот же объект, что и ядро ​​второго уровня.

Но когда я сравниваю оба объекта, он показывает «false».

Может ли кто-нибудь сообщить мне, как спящий кэш второго уровня работает внутри?

+0

Можете вы показать нам карту вашего пользователя? вы включили кеш второго уровня в своей организации? Вы уверены, что кэш попал во второй запрос? – benzonico

+0

Привет, я включил кеш L2 и генерирует только один SQL-запрос. <Имя свойства = "hibernate.cache.use_second_level_cache"> истинный \t \t <имя свойства = "hibernate.cache.region.factory_class"> org.hibernate.cache.ehcache.EhCacheRegionFactory – Naidu

ответ

5

Кэш второго уровня не хранит экземпляры вашего объекта. Он сохраняет содержимое строки, соответствующей этому объекту. И даже если он хранит экземпляры сущностей, возвращая одни и те же экземпляры в разные транзакции, будет полностью разорвать ваше приложение: разные транзакции, выполняющиеся параллельно, будут изменять один и тот же, не потокобезопасный объект, и у вас больше не будет изоляции от транзакций.

Таким образом, каждая транзакция всегда будет иметь отдельный экземпляр объекта, даже если используется кеш второго уровня.

Чтобы проверить, что второй кеш попал, включите ведение журнала SQL и убедитесь, что запрос на загрузку данных выполняется один раз, а не дважды.

+0

Спасибо за Ваш ответ. Понял концепцию – Naidu

Смежные вопросы