2016-09-08 11 views
1

私はさまざまな値のデータベースを持っており、すべて日付に関連付けられています。私がしたいのは、日付とその日付に関連するすべての値の平均を持つマップを返すことです。スプリングデータjpa - リターンマップ

{ 
    "timestamp": 1473327111738, 
    "status": 500, 
    "error": "Internal Server Error", 
    "exception": "org.springframework.dao.IncorrectResultSizeDataAccessException", 
    "message": "result returns more than one elements; nested exception is javax.persistence.NonUniqueResultException: result returns more than one elements", 
    "path": "/dailyAverage" 
} 

マイコード:

@Query("SELECT du.date, avg(du.usage) FROM DataUsageModel du WHERE du.date BETWEEN :start_time AND :end_time GROUP BY day(du.date)") 
Map<String, Double> findDailyAverages(@Param("start_time") LocalDateTime startTime, @Param("end_time") LocalDateTime endTime); 
+0

リストを返すタイプ – nowszy94

答えて

1

あなたは上記の持っていることはJSONオブジェクトで毎回私は、次の応答を取得要求を行います。 findDailyAveragesメソッドを呼び出してJsonオブジェクトに変換するコードが必要です。あなたは、HashMapの後、JSONObjectを解析変更したい(上記のあなたの応答)と作成いけない場合

public static void jsonToMap(String t) throws JSONException { 

    HashMap<String, String> map = new HashMap<String, String>(); 
    JSONObject jObject = new JSONObject(t); 
    Iterator<?> keys = jObject.keys(); 

    while(keys.hasNext()){ 
     String key = (String)keys.next(); 
     String value = jObject.getString(key); 
     map.put(key, value); 

    } 

    System.out.println("json : "+jObject); 
    System.out.println("map : "+map); 
} 
0

DataModalで選択したフィールドコンストラクタ 例

class DataModal{ 
    Date date; 
    Float usage; 
    DataModal(Date date, Float usage){ 
    this.date=date; 
    this.usage=usage; 
    } 
} 



@Query("SELECT new DataModal(du.date, avg(du.usage) as usage) FROM  DataUsageModel du WHERE du.date BETWEEN :start_time AND :end_time GROUP BY day(du.date)") 

この戻り値を使用して新しいモーダル(DataModal)を作成します。リストとして

+0

とは何ですか? – kmera

関連する問題