2013-06-18 3 views
3

Я возвращаю результаты SQL-запроса в формате JSON. Результат в порядке, но ключи (столбцы, указанные в запросе) отсутствуют. Нужно ли связать класс с запросом, чтобы получить ключевые имена? Я не думаю, что это сопоставление Джексона, поскольку, когда я использую его явно (объект mapper вместо того, чтобы позволить Spring обрабатывать его в @ResponseBody), я получаю тот же результат.Spring @ResponseBody возвращает JSON, но ключи отсутствуют

Spring 3.2.1, Hibernate 3.6. Использование Hibernate createSQLQuery для получения результатов из 5 таблиц.

List<EvalMasterEvalDetail> details = session.createSQLQuery(query).list(); 

Результат выглядит следующим образом:

[[61,"Conference","CME Conference"],[42,"Lecture","fellow lecture"]] 

Должно быть

[[{"detail_id":61, "event_type":"Conference", "event_name":"CME Conference"}], 
[{"detail_id":42, "event_type":"Lecture", "event_name":"fellow lecture"}]] 

ответ

3

По умолчанию запрос SQL в Hibernate возвращает список скалярных значений (для одного столбца в select) или список Object[] (для нескольких столбцов).

У вас есть последний случай. List<EvalMasterEvalDetail> в этом случае не означает, что список содержит экземпляры EvalMasterEvalDetail, так как list() возвращает необработанный List, так что у вас есть необработанное преобразование.

Если каждый кортеж результата представляет собой сопоставленную сущность (или несколько образованных объектов), вы можете использовать addEntity() and addJoin() для преобразования их в объекты.

Если каждый кортеж результата представляет собой произвольный (не отображаемый) класс, вы можете использовать ResultTransformer (например, AliasToBeanResultTransformer).

Также вы можете конвертировать Object[] s для целевых объектов вручную (полезно в сложных случаях).

+0

Как добавить addEntity в репозиторий JPA @Query? – Shamseer

0

вы можете подготовить JSONObject или список JSONObject, итерации по вашему списку и возврата к клиенту как String.

Смежные вопросы