如何使用命名查询返回Map <key,value>?</key,value>

时间:2013-06-03 06:13:58

标签: java hibernate named-query

我使用命名查询返回List<?>。但现在我要求我必须返回一个Map<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和包含产品名称和描述的值......密钥不应包含重复值(即重复的产品ID)。

现在我的问题是如何在命名查询中返回Map<Long,String> ..我没有得到谷歌的帮助...... 任何人都有关于如何做到这一点的想法..

2 个答案:

答案 0 :(得分: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());
    }
}

如果你必须在很多地方使用它,你也可以把迭代片段放在列表中并将地图返回到产品对象本身。

答案 1 :(得分:0)

请看这篇文章。可能这会对你有所帮助。对于重复删除,您可以在另一个命名查询中尝试嵌套查询。

how to return Map<Key, Value> with HQL