Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
# JPA Cache
JPA предоставляет два уровня кэширования для оптимизации производительности: First-Level Cache (L1) и Second-Level Cache (L2). Также существует Query Cache для результатов запросов.
1. First-Level Cache (L1)
Это встроенный кэш на уровне Persistence Context (сессии). Работает автоматически.
public class FirstLevelCacheExample {
@Autowired
private EntityManager entityManager;
@Transactional
public void demonstrateL1Cache() {
User user1 = entityManager.find(User.class, 1L);
System.out.println("First query executed");
User user2 = entityManager.find(User.class, 1L);
System.out.println("Second query from cache");
System.out.println(user1 == user2);
}
}
2. Second-Level Cache (L2)
Это кэш на уровне SessionFactory, доступен всем сессиям. Требует настройки.
@Entity
@Cacheable
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class User {
@Id
private Long id;
private String name;
}
3. Query Cache
Кэширует результаты запросов.
public class QueryCacheExample {
@Autowired
private EntityManager entityManager;
@Transactional
public void queryCache() {
TypedQuery<User> query = entityManager.createQuery(
"SELECT u FROM User u WHERE u.email = :email",
User.class
);
query.setHint("org.hibernate.cacheable", true);
List<User> users = query.getResultList();
}
}
Сравнение
L1 Cache - встроен, работает на уровне сессии, всегда включен. L2 Cache - требует настройки, доступен всем сессиям. Query Cache - кэширует результаты запросов.
Кэширование повышает производительность, но требует понимания и осторожности для избежания проблем с консистентностью данных.