Когда я должен использовать @EntityGraph в весенних данных JPA? - PullRequest
0 голосов
/ 04 февраля 2019

Аннотация @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;

Интересно, какой выбор лучше?Последняя предлагается во многих статьях, но я заметил, что объединяющая таблица будет расти в геометрической прогрессии, если две таблицы становятся больше.

Итак, когда я должен использовать одну поверх другой и почему?

1 Ответ

0 голосов
/ 05 февраля 2019

Цель состоит в том, чтобы Hibernate генерировал как можно меньше SQL-запросов.

Таким образом, @EntityGraph - это способ обеспечения такого рода оптимизации.

Проблема с несколькими SQL-запросами заключается вназывается n + 1 выберите задачу.

Есть много статей об этом и о том, как ее решить.Один из них на SO: Каково решение проблемы N + 1 в JPA и Hibernate?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...