Spring Data JPA Как настроить кэширование части объектов при загрузке через CrudRepository
Пусть есть 2 класса (аннотации lombok генерирующие конструкторы и сеттеры/геттеры я для краткости опущу):
- Фильм
@Entity
public class Movie {
@Id
private int id;
private String title;
private String description;
}
- Сеанс просмотра фильма в кино
@Entity
public class MovieSession {
@Id
private int id;
@ManyToOne
private Movie movie;
@ManyToOne
private ViewingRoom viewingRoom;
private LocalDateTime startTime;
}
Для их загрузки я использую
public interface MovieSessionRepo extends CrudRepository<MovieSession, Integer> {}
public interface MovieRepo extends CrudRepository<Movie, Integer> {}
соответственно. Вот maven dependency, если это имеет значение:
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<version>2.7.0</version>
Предположим, что информация о сеансе (MovieSession) меняется намного чаще, чем информация о фильме (Movie), который воообще почти никогда не меняется. Плюс сеансов на один и тот же фильм много.
Проблема: Сейчас каждый раз при запросе а-ля getMovieSessionById(id) я получаю у MovieSession в качестве атрибута movie новый объект (видно в дебагере Intellij как Movie@разные_числа).
Можно ли как-то настроить это всё так чтобы объекты Movie хранились где-то в кэше, а не доставались каждый раз из базы данных (что, если я правильно понимаю, происходит сейчас), а обновлялись например каждый час / 2 часа / 100 часов?