JPA - Как получить доступ к метаданным запроса? - PullRequest
3 голосов
/ 01 апреля 2011

Я создаю общую логику отчетности для своего приложения и хочу иметь возможность выполнять любой запрос и анализировать ответы. Входными данными для отчетности являются собственные запросы SQL, которые я выполняю с использованием EntityManager.createNativeQuery (query).

У меня все это работает нормально, но в настоящее время я также должен указать возвращаемые "заголовки" для ответа на запрос.

Например, для этого запроса:

SELECT name, email FROM users;

Мне нужно знать, что я возвращаю имя и адрес электронной почты из запроса. Все, что я получаю от выполнения запроса - это список массивов строк. Так или иначе, я хотел бы иметь возможность вернуть массив или список, в котором есть ["name", "email"] для этого конкретного запроса.

Я не вижу способа опросить объект Query, чтобы узнать эту информацию. Я также не вижу никаких указаний на эти данные в ответе. Есть ли способ получить эти данные в JPA?

В частности, я использую реализацию EclipseLink.

Спасибо.

Ответы [ 3 ]

4 голосов
/ 04 апреля 2011

EclipseLink также позволяет собственным запросам возвращать Карты вместо объекта [].

Использовать подсказку "eclipselink.result-type".

"eclipselink.result-type" = "Карта«

0 голосов
/ 02 апреля 2011

С AspectJ вы можете получить необходимую информацию из запроса.

0 голосов
/ 02 апреля 2011

Ниже запрос выбирает обязательные поля из базы данных и устанавливает их в объект, используя соответствующий конструктор, и возвращает список объектов.

SELECT NEW package_name.User(u.name,u.email) FROM User u;

Это вернет список объектов пользователя вместо строковых массивов, вкакие поля имени и адреса электронной почты установлены, а остальные поля имеют свои значения по умолчанию.

Вы должны передать только те поля, которые необходимо получить, но для этого необходимо предоставить конструктор.В этом случае для класса User должен быть конструктор для полей name, email.

Здесь вам не нужно запоминать имена полей, просто выберите необходимые детали из объекта, используя методы accessor (get).

...