Убрать запрос SQL из цикла
Не могу додуматься, как сделать запрос из БД так, чтобы вынести его из цикла:
Есть метод для получения фильмов
public Collection<Film> getFilms() {
//create film
String sqlFilmById = "SELECT * FROM FILMS LEFT OUTER JOIN RATINGS ON FILMS.RATINGMPAA_ID = RATINGS.RATINGMPAA_ID";
List<Film> films = jdbcTemplate.query(sqlFilmById, FilmDBStorage::makeFilm);
for (Film film : films) {
//create genre to film
String sqlFilmGenres = "SELECT * " +
"FROM FILM_GENRES LEFT OUTER JOIN GENRES " +
"ON GENRES.GENRE_ID = FILM_GENRES.GENRE_ID " +
"WHERE FILM_ID = ?";
List<Genre> filmGenres = jdbcTemplate.query(
sqlFilmGenres, FilmDBStorage::makeGenre, film.getId());
//put genre to film
film.setGenres(filmGenres);
}
return films;
}
Так я получаю жанр из таблицы
static Genre makeGenre(ResultSet rs, int rowNum) {
return new Genre(
rs.getInt("GENRE_ID"),
rs.getString("GENRE_NAME")
);
}
Сам класс Film
public class Film {
private Integer id;
private String name;
private String description;
private LocalDate releaseDate;
private Integer duration;
private List<Genre> genres = new ArrayList<>();
private MPA mpa;
private Integer rate;
И класс Genre
public class Genre {
@Positive
protected int id;
@NotBlank
protected String name;
Источник: Stack Overflow на русском