Аннотация @EntityGraph
объединит несколько запросов SQL в один запрос с JOIN, если у целевого объекта есть другие ссылки на объекты.
class Hotel {
int id;
String name;
City city;
}
class City {
int id;
String name;
}
Если я вызову метод hotelDao.findAllByName("hotelname")
, он сгенерирует 2 запроса:
select hotel.id hotel.name hotel.city.id from hotel;
select city.id city.name from city where city.id={?};
// Я думаю, ?
- это список идентификаторов города в результате первого запроса
ЕслиЯ пометил вышеописанный метод с помощью @EntityGraph("city")
, вместо этого будет сгенерирован 1 запрос:
select hotel.id hotel.name city.id city.name from hotel join city where hotel.cityid = city.id;
Интересно, какой выбор лучше?Последняя предлагается во многих статьях, но я заметил, что объединяющая таблица будет расти в геометрической прогрессии, если две таблицы становятся больше.
Итак, когда я должен использовать одну поверх другой и почему?