java 如何使用 Hibernate\HQL 返回 Map<Key, Value>

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/31521080/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-11-02 18:44:48  来源:igfitidea点击:

How to return Map<Key, Value> with Hibernate\HQL

javahibernatehql

提问by Shvalb

I have an entry as follow:

我有一个条目如下:

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

I would like to query this table and put the results into a HashMap! as follow:

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

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

Is this possible to put the entity as the value of the map?

这是否可以将实体作为地图的值?

Can I get a code example?

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

回答by Sertage

Yes, for example:

是的,例如:

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

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

But that will return a list of Maps. You should take a look hereto understand better.

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

Edit:To explain better, the return will be something like this:

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

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

It is one Map for each record. To put all in only one map, unfortunately, it has to be manually:

每个记录是一个 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);
  }
}