Должен ли я использовать ORM, если мое приложение требует много запросов на соединение - PullRequest
0 голосов
/ 29 августа 2018

У меня есть 3 лица я. Актив (PK asset_id, FK category_id) II. Категория (PK category_id, FK: size_id) III. Размер (PK size_id)

Теперь каждый актив принадлежит к категории (много к одному), и каждая категория имеет размер (много к одному) В типичном ORM я бы запустил запрос для поиска актива, который, в свою очередь, вызвал бы (SELECT * from asset) Теперь, когда я вызываю Asset.getCategory (), он будет вызывать (SELECT * from category) и вызов Caegory.getSize () будет вызывать (SE: ECT * от размера)

так, один поиск сущности в ООП делает 3 вызова БД Где, как будто я пишу запрос соединения, который он делает по вызову БД. Меня удивляет, почему мы используем ORM.

1 Ответ

0 голосов
/ 29 августа 2018

Ваше предположение неверно. В JPA вы можете запросить весь граф объектов с помощью ключевого слова fetch, которое в основном получит все данные из базы данных за один запрос. Так что вы бы сделали что-то вроде

entityManager.createQuery("select asset from Asset asset join fetch asset.category cat join fetch cat.size size");

, который получит Актив с его Категорией, и ту Категорию с его Размером в одном запросе. Кроме того, что 3 таблицы очень малы, обычно вы можете объединить несколько таблиц с базовыми объединениями без проблем с производительностью.

...