← Назад к вопросам

Какие знаешь Cache JPA?

2.0 Middle🔥 161 комментариев
#ORM и Hibernate

Комментарии (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 - кэширует результаты запросов.

Кэширование повышает производительность, но требует понимания и осторожности для избежания проблем с консистентностью данных.

Какие знаешь Cache JPA? | PrepBro