Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 9 лет назад пользователемOxana Dudnik
1 Hibernate cashe. Part 4 Для студентов старших курсов университетов Ст.преподаватель Дудник О.А.
2 Hibernate cache Довольно часто в java приложениях с целью снижения нагрузки на БД используют кеш. Прежде всего Hibernate cache это 3 уровня кэширования: Кеш первого уровня (First-level cache); Кеш второго уровня (Second-level cache); Кеш запросов (Query cache);
3 Кеш первого уровня Кеш первого уровня всегда привязан к объекту сессии. Hibernate всегда по умолчанию использует этот кеш и его нельзя отключить. Давайте сразу рассмотрим следующий код: SharedDoc persistedDoc = (SharedDoc) session.load(SharedDoc.class, docId); System.out.println(persistedDoc.getName()); user1.setDoc(persistedDoc); persistedDoc = (SharedDoc) session.load(SharedDoc.class, docId); System.out.println(persistedDoc.getName()); user2.setDoc(persistedDoc);
4 Кеш первого уровня В этом примере будет выполнен 1 запрос в базу, несмотря на то, что делается 2 вызова load(), так как эти вызовы происходят в контексте одной сессии. Во время второй попытки загрузить план с тем же идентификатором будет использован кеш сессии. При использовании методов save(), update(), saveOrUpdate(), load(), get(), list(), iterate(), scroll() всегда будет задействован кеш первого уровня.
5 Кеш второго уровня Кеш второго уровня Кеш второго уровня привязан к объекту- фабрике сессий (Session Factory object). Session session = factory.openSession(); SharedDoc doc = (SharedDoc) session.load(SharedDoc.class, 1L); System.out.println(doc.getName()); session.close(); session = factory.openSession(); doc = (SharedDoc) session.load(SharedDoc.class, 1L); System.out.println(doc.getName()); session.close();
6 Кеш второго уровня Кеш второго уровня В данном примере будет выполнено 2 запроса в базу, это связано с тем, что по умолчанию кеш второго уровня отключен. Для включения необходимо добавить следующие строки в Вашем конфигурационном файле JPA (persistence.xml):
7 Кеш второго уровня Кеш второго уровня //или в более старых версиях //
8 Кеш второго уровня Ну и в завершение еще нужно указать самому хибернейту, что именно кэшировать. К счастью, это очень легко можно сделать с помощью аннотаций, = = CacheConcurrencyStrategy.READ_WRITE) public class SharedDoc{ private Set users; }
9 Кеш третьего уровня Query query = session.createQuery("from SharedDoc doc where doc.name = :name"); SharedDoc persistedDoc = (SharedDoc) query.setParameter("name", "first").uniqueResult(); System.out.println(persistedDoc.getName()); user1.setDoc(persistedDoc); persistedDoc = (SharedDoc) query.setParameter("name", "first").uniqueResult(); System.out.println(persistedDoc.getName()); user2.setDoc(persistedDoc);
10 Кеш третьего уровня Результаты такого рода запросов не сохраняются ни кешем первого, ни второго уровня. Это как раз то место, где можно использовать кеш запросов. Он тоже по умолчанию отключен. Для включения нужно добавить следующую строку в конфигурационный файл: А также добавить query.setCacheable(true);
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.