如何获取HQL的结果

时间:2013-09-28 06:16:24

标签: java hibernate collections map hql

我需要应该返回Map的hql查询结果,我尝试了hql新的地图查询,但它返回地图列表,如下所示

    Session session = sessionFactory.getCurrentSession();
    String HQL_QUERY = "select new map(user.id as id, user.fullName as fullName)
    from User user";
    List<Map<String,String>> usersList = session.createQuery(HQL_QUERY).list();

如果这是唯一的解决方案,那么如何将地图列表转换为单个地图而不进行循环,因为如果查询返回更多行,则循环需要更多时间进行转换。帮助我。

3 个答案:

答案 0 :(得分:4)

我建议使用Criteria然后使用结果转换器来创建地图。查看this官方文档。这为您提供了线索,您可以在网上找到更多样本。

答案 1 :(得分:1)

创建地图不是HQL的工作。这是你的工作。只需循环遍历查询中的行:

String hql = "select user.id, user.fullName from User user";
List<Object[]> rows = session.createQuery(hql).list();
Map<String, String> result = new HashMap<>();
for (Object[] row : rows) {
    result.put((String) row[0], (String) row[1]);
}

答案 2 :(得分:0)

你可以使用下面的地图

Query query = session.createQuery("select new map(id,username) from UserDetails");
List<?> idUsernameList=query.list();
Iterator<?> iterator = idUsernameList.iterator();
Map row=null;
while(iterator.hasNext()){
   row=(Map)iterator.next();
   System.out.println(row);

}