2015-07-20 40 views
1

我有一个入口如下:如何与Hibernate HQL返回地图<Key, Value>

@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(); 

这可能把实体作为地图的价值?

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

+0

不这么认为,但解决将执行sql获取列表,遍历并创建绘制出它。 –

+0

Duplicate http://stackoverflow.com/questions/7876724/how-to-return-mapkey-value-with-hql – 6ton

+0

它不是重复的 - 我很想知道如何创建结果HashMap的语法工作时映射的值是一个Hibernate实体(表中的行)。如果可能的话...... – Shvalb

回答

5

是的,比如说:

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(); 

这是一个地图的每个记录。把所有只在一个地图,不幸的是,它必须手动为:

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); 
    } 
} 
+0

谢谢。我会再看看这个链接。 – Shvalb

+0

你的意思是这样吗? 地图等级=(地图)session.createSQLQuery(“select new Map FROM Rank r”)。list(); – Shvalb