Эффективно отображать результаты нескольких объединений - PullRequest
1 голос
/ 20 сентября 2011

В проекте JPA мне нужно отобразить таблицу, данные которой получены от 5 связанных объектов. Без JPA я мог бы написать SQL-запрос, который объединяет 5 таблиц базы данных и фильтрует их по некоторым критериям. Предположим, что поля, включенные в критерии фильтрации, являются только полями первого объекта. Используя JPA, я могу загрузить отфильтрованные экземпляры первого объекта и перемещаться по свойствам до последнего объекта. Меня беспокоит то, как количество запросов к базе данных может взорваться, если я не смогу использовать или ошибиться с аннотацией fecttype = eager. Каков наилучший подход в таких случаях? Я хотел бы иметь строгий контроль над SQL-запросами, которые будут выполняться, поэтому я могу оптимизировать их, но если я напишу SQL-запрос с объединениями вручную, нужно ли мне использовать «старый» набор результатов для извлечения данных?

1 Ответ

0 голосов
/ 20 сентября 2011

Вы можете использовать встроенный язык запросов JPA, JPQL, не так ли?(У него наверняка есть оператор JOIN.) Имейте в виду, что это не стандартный SQL, а нечто подобное, поэтому внимательно прочитайте документацию по JPQL.Да, это все еще простые текстовые запросы, встроенные в код Java, и это позор, но, эй, это то, как далеко может зайти Java, поддерживая процесс разработки.

Основным преимуществом здесь является то, что вы получаете объектные объекты в видерезультат ваших запросов - хотя вам все равно нужно привести их из Object.Вы также можете использовать объекты (записи) и их переменные-члены (атрибуты) непосредственно в строке запроса, так что это шаг по сравнению со старым добрым JDBC.

В качестве альтернативы вы также можете выбрать Criteria API, но, честно говоря,Мой опыт был не очень хорош с этим.Синтаксис довольно ужасен, и вы в конечном итоге сами строите низкоуровневый запрос.Это явно Java в худшем случае ... но, по крайней мере, строки, содержащие запросы, могут быть исключены из кода.Я не уверен, что это того стоит.

Проверьте эту страницу для получения дополнительной информации и примеров:

http://download.oracle.com/javaee/6/tutorial/doc/gjise.html

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