我使用命名查询返回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>
..我没有得到谷歌的帮助......
任何人都有关于如何做到这一点的想法..
答案 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)
请看这篇文章。可能这会对你有所帮助。对于重复删除,您可以在另一个命名查询中尝试嵌套查询。