【问题标题】:How to return Map<Key, Value> with Hibernate\HQL如何使用 Hibernate\HQL 返回 Map<Key, Value>
【发布时间】:2015-10-09 20:18:36
【问题描述】:

我有一个条目如下:

@Entity
@Table(name="rank")
class Rank implements Serializable {
 private int id;
 private int rank_id;
 private date creationDate;
 ...
 // getters\setters...
}

我想查询这张表并将结果放入一个HashMap中! 如下:

Map<Integer, Rank> = session.createSQL("select new map...").list();

这样可以把实体作为map的值吗?

我可以得到一个代码示例吗?

【问题讨论】:

  • 不这么认为,但解决方法是执行 sql 获取列表,遍历并创建映射。
  • 这不是重复的 - 我很想知道当映射的值是 Hibernate 实体(表中的行)时创建结果 HashMap 的语法是如何工作的。如果可能的话……

标签: java hibernate hql


【解决方案1】:

是的,例如:

Select new Map(r.id,r) FROM Rank r

但这会返回一个地图列表。你应该看看here 以更好地理解。

编辑:为了更好地解释,返回将是这样的:

List<Map<Long, Rank>> ranks = (List<Map<Long, Rank>>) session.createQuery("select new Map<r.rankId,r> FROM Rank r").list();

每条记录对应一个 Map。不幸的是,要将所有内容都放在一张地图中,必须手动:

List<Rank> ranks = (List<Rank>) session.createQuery("select new r FROM Rank r").list();
Map<Long, Rank> mapRanks  = new HashMap<Long, Rank>();
for (Rank rank : ranks) {
  if (!map.contains(rank.getId()) {
    map.put(rank.getId(), rank);
  }
}

【讨论】:

  • 谢谢。我会再看一下这个链接。
  • 你的意思是这样的吗? Map rank = (Map) session.createSQLQuery("select new Map FROM Rank r").list();
猜你喜欢
  • 2011-12-14
  • 1970-01-01
  • 2014-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-22
相关资源
最近更新 更多