2013-06-18 53 views
3

我以JSON格式返回SQL查詢的結果。結果是好的,但是鍵(在查詢中指定的列)缺失。爲了獲得關鍵字名稱,我必須將類與查詢關聯嗎?我不認爲這是傑克遜映射,因爲當我明確使用它(對象映射器而不是讓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

通過在Hibernate中默認的SQL查詢返回標值的列表(在select單柱)或列表Object[](用於多列)。

你有後者的情況。在這種情況下,List<EvalMasterEvalDetail>並不意味着該列表包含EvalMasterEvalDetail的實例,因爲list()返回原始List,因此您有未經檢查的轉換。

如果結果的每個元組都表示一個映射實體(或多個映射實體),則可以使用addEntity() and addJoin()將它們轉換爲實體。

如果結果的每個元組都表示一個任意(非映射)類,則可以使用ResultTransformer(如AliasToBeanResultTransformer)。

您也可以將Object[] s手動轉換爲目標對象(在複雜情況下有用)。

+0

如何添加addEntity到JPA Repository @Query? – Shamseer

0

您可以通過遍歷列表並以String形式返回給客戶端來準備JSONObject或JSONObject的列表。