Я хочу уменьшить количество запросов к весне.При получении объекта с помощью @ElementCollection через SQL я хочу получить данные для ElementCollections напрямую через JOIN в запросах.
Атрибут с ElementCollection
@ElementCollection(fetch = FetchType.EAGER)
@JoinTable(name = "song_genre_list")
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
private List<String> genre;
Метод, который используетпользовательская строка:
@Query(
value = "select distinct s.*, g.* from musicdb.songs s left join musicdb.song_genre_list g on s.id = g.song_id where s.name like ?1 or s.artist like ?1",
nativeQuery = true)
List<Song> searchSong(String title);
Как я могу представить определение запроса, который также загружает эту коллекцию элементов:
SELECT DISTINCT s.*, g.* FROM musicdb.songs s LEFT JOIN musicdb.song_genre_list g ON s.id = g.song_id WHERE s.name LIKE ?1 OR s.artist LIKE ?1
Что делает Spring в настоящее время (загрузка жанров для 3 песен с большим количеством запросов):
Hibernate: select distinct s.*, g.* from musicdb.songs s left join musicdb.song_genre_list g on s.id = g.song_id where s.name like ?1 or s.artist like ?1
Hibernate: select genre0_.song_id as song_id1_4_0_, genre0_.genre as genre2_4_0_ from musicdb.song_genre_list genre0_ where genre0_.song_id=?
Hibernate: select genre0_.song_id as song_id1_4_0_, genre0_.genre as genre2_4_0_ from musicdb.song_genre_list genre0_ where genre0_.song_id=?
Hibernate: select genre0_.song_id as song_id1_4_0_, genre0_.genre as genre2_4_0_ from musicdb.song_genre_list genre0_ where genre0_.song_id=?
Что я хочу, чтобы Spring сделал:
Hibernate: select distinct s.*, g.* from musicdb.songs s left join musicdb.song_genre_list g on s.id = g.song_id where s.name like ?1 or s.artist like ?1
Необходимые данные для ElementCollection уже включены в объединение.Как я могу сказать пружине импортировать эти данные?