Spring Data JPA Как настроить кэширование части объектов при загрузке через CrudRepository

Пусть есть 2 класса (аннотации lombok генерирующие конструкторы и сеттеры/геттеры я для краткости опущу):

  1. Фильм
@Entity
public class Movie {

    @Id
    private int id;
    private String title;
    private String description;

}
  1. Сеанс просмотра фильма в кино
@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 часов?


Ответы (0 шт):