2016-09-08 102 views
1

我有一个数据库,其中包含所有与日期相关的各种值。我想要做的是返回地图的日期和与日期相关的所有值的平均值。每次我提出一个要求,我得到如下回应:Spring data 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

尝试使List >作为返回类型 – nowszy94

回答

1

你有上面什么是JSON对象。必须有调用findDailyAverages方法并将其转换为Json对象的代码。如果你不想改变然后解析的JSONObject(以上你的回答),并创建的HashMap

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)与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)") 

这个返回值作为列表

+0

最新的问题是什么? – kmera