You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Hibernate SQL查询结果封装为HashMap<Integer,String>返回?

实现方法

你使用Hibernate执行原生SQL查询多个字段时,query.list()默认返回List<Object[]>结构:每一个Object[]对应数据库返回的一行数据,数组元素顺序和你SELECT语句里写的字段顺序完全一致,也就是下标0是media_id,下标1是media_path。
你只需要遍历这个结果集,逐行取出两个字段的值,放入HashMap即可,完整可运行代码如下:

private HashMap<Integer, String> getMedias() {
    final String queryString = "SELECT media_id, media_path from media where XXX ...";

    final Query query = App.getCurrentSession().createSQLQuery(queryString);
    // 保留原有参数设置逻辑即可
    query.setString("xxx", xxx);
    query.setDate("xxx", xxx);
    query.setDate("xxx", xxx);

    HashMap<Integer, String> mediaMap = new HashMap<>();
    List<Object[]> resultRows = query.list();
    for (Object[] row : resultRows) {
        // 按字段顺序取出值做类型转换
        Integer mediaId = (Integer) row[0];
        String mediaPath = (String) row[1];
        mediaMap.put(mediaId, mediaPath);
    }

    return mediaMap;
}
注意避坑
  • 如果数据库中media_id字段定义为BIGINT而非INT,直接强转Integer会抛出类型转换异常,这时候要通过Number做中转转换:Integer mediaId = ((Number) row[0]).intValue();
  • HashMap的键具有唯一性,如果查询结果中存在重复的media_id,后遍历到的记录会覆盖之前同ID对应的media_path。如果你需要保留同ID下的多条路径,需要把返回值类型调整为HashMap<Integer, List<String>>,存入时按ID往对应列表追加路径即可。
  • 原代码里用String.valueOf(queryString)包裹查询字符串是多余操作,queryString本身已经是String类型,不需要额外转换。

内容的提问来源于stack exchange,提问作者JhinKazama

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 03:42:17