2013-06-03 67 views
3

我正在使用命名查詢來返回List<?>。但現在我有我不得不返回Map<key,value>,這樣我可以使用鍵過濾重複的要求..如何使用命名查詢返回地圖<key,value>?

我有一個名爲查詢返回的產品名稱的List<String>

<named-query name="FETCH_ACTIVE_PRODUCTS_NAME" > 
    <query>SELECT product.name FROM Product product 
      WHERE product.name LIKE :name 
    </query> 
</named-query> 

另一命名查詢來獲取一個List<String>的產品說明,

<named-query name="FETCH_ACTIVE_PRODUCTS_DESC" > 
    <query>SELECT product.desc FROM Product product 
      WHERE product.desc LIKE :desc 
    </query> 
</named-query> 

另一個命名查詢其按產品名稱獲取產品ID的

<named-query name="FETCH_ACTIVE_PRODUCTS_ID_BY_NAME" > 
    <query>SELECT product.id FROM Product product 
      WHERE product.name LIKE :name 
    </query> 
</named-query> 

現在我必須返回一個帶有key和value..key的Map<Long,String>,其中包含產品標識和包含產品名稱和說明的值..密鑰不應包含重複值(即,複製產品的ID)..

現在我的問題是我如何可以返回名爲query..I've一個Map<Long,String>有沒有從谷歌幫助... 任何一個有關於如何做到這一點的想法..

+0

你在使用spring-hibernate嗎? – sanbhat

+0

是的,我使用春季休眠..你有任何想法如何做到這一點? – Lucky

+0

正如我所知,你必須通過循環來創建一個地圖。因爲在Hibernate查詢中只返回列表。 – Ajit

回答

0

您可以在代碼中執行此操作(調用方法),方法是循環訪問列表並將值添加到地圖中。

代碼片斷

List <Product> products = new ArrayList<Product>(); 
// update products list by fetching from db. 
Map<Long, String> productDesc = new HashMap<Long, String>(); 
for(Product prod : products) { 
    if(productDesc.get(prod.getId() == null){ 
     productDesc.put(prod.toString()); 
    } 
} 

你也可以把通過列表迭代,如果你有在很多地方使用它返回的產品對象本身內部地圖的片段。

+0

是的,我有這個在我心中......這將是我的第二個解決方案,如果我沒有得到一個好的..它似乎沒有直接的方法來獲取使用hibernate命名查詢映射..im害怕它是否會慢因爲我將這些查詢用於搜索結果。 – Lucky

+0

@Lakshmanan - 因爲hibernate將表格結果映射到對象形式,所以您的查詢永遠不會返回地圖。除非你處理數百萬行,否則你不需要關心性能(在這種情況下,你應該優化你的查詢/數據) –

相關問題