我以JSON格式返回SQL查询的结果。结果没问题,但缺少密钥(查询中指定的列)。我是否必须将类与查询关联才能获取关键名称?我不认为这是杰克逊映射,因为当我明确地使用它时(对象映射器而不是让Spring在@ResponseBody中处理它)我得到相同的结果。
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"}]]
答案 0 :(得分:3)
默认情况下,Hibernate中的SQL查询返回标量值列表(对于select
中的单列)或Object[]
列表(对于多列)。
你有后一种情况。在这种情况下,List<EvalMasterEvalDetail>
并不意味着该列表包含EvalMasterEvalDetail
的实例,因为list()
会返回原始List
,因此您可以取消选中转化。
如果每个结果元组表示一个映射实体(或多个映射实体),则可以使用addEntity()
and addJoin()
将它们转换为实体。
如果每个结果元组代表一个任意(非映射)类,则可以使用ResultTransformer
(例如AliasToBeanResultTransformer
)。
您也可以手动将Object[]
转换为目标对象(在复杂情况下很有用)。
答案 1 :(得分:0)
您可以通过迭代列表并以字符串形式返回客户端来准备JSONObject或JSONObject列表。