ibatis值应为Integer但我得到Hashmap

时间:2016-10-19 08:11:30

标签: java ibatis

我在从DB检索数据时遇到问题。

这是DAO的方法

@MapKey("key")
public Map<String, Integer> getMeasurementsPerNode() throws SQLException;

有mapper

<select id="getMeasurementsPerNode" resultType="hashmap">
    SELECT 
        w.wd_ip AS `key`,
        COUNT(m.id) AS `value` 
    FROM t_workers w
    LEFT JOIN t_measurements m ON w.id = m.worker_id AND m.measurement_timestamp <![CDATA[>]]> DATE_SUB(NOW(), INTERVAL 1 HOUR)
    WHERE w.active = 1
    AND w.worker_type_id = 1
    GROUP BY w.wd_ip 
    ORDER BY `value` DESC
</select>

我的问题是,当我想将地图中获得的值用作整数时,我得到ClassCastExceptionHashmapInteger)。你能帮我吗?

这是我使用它的循环:

protected Map<String, Integer> nodeMeasurementsCount = nodeMapper.getMeasurementsPerNode();
for (Map.Entry<String, Integer> nodeThread : nodeMeasurementsCount.entrySet()) {
    NodeRestartCounter nrc = new NodeRestartCounter();
    nrc.setNode(nodeThread.getKey());
    nrc.setMeasurementCount(nodeThread.getValue());
    nodeRestartCounterList.add(nrc);
}

1 个答案:

答案 0 :(得分:0)

你不能做这种映射。

Hashmap中的键和值包含在Map.Entry对象中,无法通过SqlMaps直接映射。

https://docs.oracle.com/javase/7/docs/api/java/util/Map.Entry.html

当您将结果类型提及为散列映射(java.util.HashMap)时,结果始终是HashMap列表,每个映射包含列名作为键,其对应值作为特定行的列值。