2015-07-20 23 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