LINUX.ORG.RU

Указание связей в запросе по объектной модели.


0

1

Всем привет. Пусть имеется объектная модель предметной области. Реализована она на языке с ООП (например, java), для хранения в РСУБД используется ORM фреймворк (например, hibernate), для запросов либо API(JPA), либо объектный язык (HQL).

Предположим в модели имеется такая цепочка сущностей (это просто пример): Grant-Project-Team-Manager-University (в принципе сейчас не важно как они связаны между собой один-к-одному, многие-ко-многим или один-ко-многим). В соответствующих классах имеются ссылки друг на друга, т.е. например грант имеет список с проектами, а проект имеет ссылку на грант и т.д.

Теперь, предположим, необходимо получить все гранты с указанием университетов, в которых работают руководители проектов, выполняющихся на данный грант, т.е. структура результата запроса такова:
Grant_1, University_1
Grant_2, University_1
Grant_3, University_2
и т.д.

Чтобы теперь выполнить такой запрос, необходимо связать с помощью join сущность Grant к University (как в JPA, так и в HQL).

Теперь собственно вопрос: есть ли инструменты, которые позволяют делать интуитивные запросы по модели без указания связей (связи, например, выводятся или получаются на основе мета-информации)? Т.е. хочется писать что-то вроде такого псевдокода:

select Grant..University where Grant.country='Russia'
ведь между Grant и University существует однозначный путь.

На основе данного псевдокода строится запрос:

select g, u 
from Grant as g join g.projects as pr join pr.teams as t join t.manager.uniersity as u
where g.country='Russia'

Можно без относительно к технологиям, можно статьи где ставилась подобная задачи и доказывалось, что это не нужно (невозможно, не продуктивно). Вообщем любая информация приветствуется. Сам не смог нагуглить.
Спасибо.


Ответ на: комментарий от Pi

... делающая жизнь проще

... в простых случаях.

А вот в сложных можно нарваться на сильную неоптимальность конструктора запросов. Сильно сомневаюсь что там вообще возможен нормальный оптимизатор с точки зрения БД.

Casus ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.