3

我正在使用命名查询来返回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>

现在我必须返回一个Map<Long,String>带有键和值的键..键包含产品ID和包含产品名称和描述的值..键不应该包含重复的值(即重复的产品ID)..

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

4

2 回答 2

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

如果您必须在许多地方使用它,您还可以将遍历列表并返回地图的片段放在产品对象本身中。

于 2013-06-03T06:28:10.270 回答
0

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

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

于 2013-06-03T06:43:53.807 回答