问题描述
我以JSON格式返回SQL查询的结果.结果还可以,但是缺少键(查询中指定的列).是否必须将类与查询关联才能获得键名?我不认为这是杰克逊映射,因为当我明确使用它(对象映射器而不是让Spring在@ResponseBody中处理它)时,我得到相同的结果.
I'm returning the results of a SQL query in JSON format. The result is ok, but the keys (columns specified in the query) are missing. Do I have to associate a class with the query in order to get key names? I don't think it's the Jackson Mapping since when I use it explicitly (object mapper instead of letting Spring handle it in the @ResponseBody) I get the same result.
Spring 3.2.1,Hibernate 3.6.使用Hibernate createSQLQuery从5个表中获取结果.
Spring 3.2.1, Hibernate 3.6. Using Hibernate createSQLQuery to get results from 5 tables.
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"}]]
推荐答案
默认情况下,Hibernate中的SQL查询返回标量值的列表(对于select
中的单列)或Object[]
列表(对于多列)
By default SQL query in Hibernate returns a list of scalar values (for single column in select
) or a list of Object[]
(for multiple columns).
您有后一种情况.在这种情况下,List<EvalMasterEvalDetail>
并不意味着列表包含EvalMasterEvalDetail
的实例,因为list()
返回原始的List
,因此您可以进行未经检查的转换.
You have the latter case. List<EvalMasterEvalDetail>
in this case doesn't mean that list contains instances of EvalMasterEvalDetail
, because list()
returns a raw List
, so that you have unchecked conversion.
如果每个结果元组代表一个映射的实体(或多个映射的实体),则可以使用 addEntity()
和addJoin()
将它们转换为实体.
If each tuple of result represents a mapped entity (or multiple mapped entities), you can use addEntity()
and addJoin()
to convert them to entities.
如果每个结果元组都表示一个任意(未映射)类,则可以使用ResultTransformer
(例如 AliasToBeanResultTransformer
).
If each tuple of result represents an arbitrary (non-mapped) class, you can use ResultTransformer
(such as AliasToBeanResultTransformer
).
您还可以手动将Object[]
转换为目标对象(在复杂情况下很有用).
Also you can convert Object[]
s to target objects manually (useful in complex cases).
这篇关于Spring @ResponseBody返回JSON,但是缺少键的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!