3

我以 JSON 格式返回 SQL 查询的结果。结果没问题,但是缺少键(查询中指定的列)。我是否必须将类与查询关联才能获取键名?我不认为这是杰克逊映射,因为当我明确使用它(对象映射器而不是让 Spring 在@ResponseBody 中处理它)时,我得到了相同的结果。

春天 3.2.1,休眠 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"}]]
4

2 回答 2

3

默认情况下,Hibernate 中的 SQL 查询返回标量值列表(对于 中的单列select)或列表Object[](对于多列)。

你有后一种情况。List<EvalMasterEvalDetail>在这种情况下并不意味着 list 包含EvalMasterEvalDetail, 因为list()返回一个 raw的实例List,所以你有未经检查的转换。

如果每个结果元组代表一个映射实体(或多个映射实体),您可以使用addEntity()andaddJoin()将它们转换为实体。

如果每个结果元组代表一个任意(非映射)类,则可以使用ResultTransformer(例如AliasToBeanResultTransformer)。

您还可以Object[]手动将 s 转换为目标对象(在复杂情况下很有用)。

于 2013-06-18T20:53:03.040 回答
0

您可以通过迭代您的列表来准备一个 JSONObject 或 JSONObject 列表并作为字符串返回给客户端。

于 2013-06-21T06:06:26.960 回答