JdbcTemplate как использовать join on

У меня имеется 3 таблицы: film, director, film_has_director.

CREATE TABLE film
(
    id INT NOT NULL AUTO_INCREMENT primary key,
    name varchar(50) not null,
    genre varchar(100) not null,
    description varchar(100) not null
);


CREATE TABLE director
(
    d_id INT NOT NULL AUTO_INCREMENT primary key,
    a_name varchar(50) not null
    
);

CREATE TABLE film_has_director
(
    id INT NOT NULL,
    d_id INT NOT NULL,
    foreign key (id) references film(id),
    foreign key (d_id) references director(d_id)
);

Я хотел реализовать поиск фильмов по названию и по режиссеру. С первым вариантом не возникло никаких проблем т.к использовалась только одна таблица film.

public List<Film> findByName(String name) {
        return jdbcTemplate.query("SELECT * FROM film WHERE Name=?", new Object[]{name}, new FilmMapper());
    }

Но далее я пришел к тому что не знаю как использоваться join on в JdbcTemplate. Необходимо выполнить следующий запрос:

select film.*, director.a_name
 from film
join film_has_director
 on film_has_director.id = film.id
join director
 on director.d_id = film_has_director.d_id
WHERE a_name = "director1"

Как это можно реализовать?

Код: FilmMapper

@Component
public class FilmMapper implements RowMapper<Film> {

    @Override
    public Film mapRow(ResultSet resultSet, int i) throws SQLException {

        Film film = new Film();

        film.setFilm_id(resultSet.getInt("Id"));
        film.setName(resultSet.getString("Name"));
        film.setGenre(resultSet.getString("genre"));
        film.setDescription(resultSet.getString("description"));

        return film;
    }
}

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

Автор решения: Темка тоже
public List<Film> findByDirectorName(String name) {
        return jdbcTemplate.query(" select f.* from film f " +
                " inner join film_has_director fd on fd.id = f.id " +
                " inner join director d on d.d_id = fd.d_id " +
                " WHERE d.a_name = ?", new Object[]{name}, new FilmMapper());
    }

Правда данный запрос предполагает, что у фильма не более одного директора. Версия, где эта проблема не помеха:

public List<Film> findByDirectorName(String name) {
        return jdbcTemplate.query(" select f.*  from film f" +
                " where f.id in " +
                "    ( select fd.id film_has_director fd " +
                "        inner join director d on d.d_id = fd.d_id " +
                "        where d.a_name = ?)", new Object[]{name}, new FilmMapper());
    }
→ Ссылка