Java 如何获得作为HQL结果的map

Java 如何获得作为HQL结果的map,java,hibernate,collections,map,hql,Java,Hibernate,Collections,Map,Hql,我需要hql查询,它应该返回映射作为结果,我尝试了hql new Map查询,但它返回映射列表,如下所示 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>&

我需要hql查询,它应该返回映射作为结果,我尝试了hql new Map查询,但它返回映射列表,如下所示

    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();
Session Session=sessionFactory.getCurrentSession();
String HQL_QUERY=“选择新映射(user.id作为id,user.fullName作为fullName)
“来自用户”;
List usersList=session.createQuery(HQL_QUERY).List();

如果这是唯一的解决方案,那么如何在不循环的情况下将映射列表转换为单个映射,因为如果查询返回更多行,那么循环转换将花费更多的时间。帮帮我。

创建地图不是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]);
}
String hql=“从用户中选择user.id、user.fullName”;
List rows=session.createQuery(hql.List();
映射结果=新的HashMap();
对于(对象[]行:行){
结果.put((字符串)行[0],(字符串)行[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]);
}
String hql=“从用户中选择user.id、user.fullName”;
List rows=session.createQuery(hql.List();
映射结果=新的HashMap();
对于(对象[]行:行){
结果.put((字符串)行[0],(字符串)行[1]);
}

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

我建议使用
标准,然后使用结果转换器来创建地图。看看官方文件。这给了你们一个线索,你们可以在网上找到更多的样本。

你们可以使用下面的地图

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

}
Query Query=session.createQuery(“从UserDetails中选择新映射(id、用户名));
List idUsernameList=query.List();
迭代器迭代器=idUsernameList.Iterator();
映射行=空;
while(iterator.hasNext()){
行=(映射)迭代器。下一步();
系统输出打印项次(行);
}

您可以使用下面的地图

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

}
Query Query=session.createQuery(“从UserDetails中选择新映射(id、用户名));
List idUsernameList=query.List();
迭代器迭代器=idUsernameList.Iterator();
映射行=空;
while(iterator.hasNext()){
行=(映射)迭代器。下一步();
系统输出打印项次(行);
}

hi@Ean谢谢你的回答,但与我发布的内容类似。获取映射列表并进行迭代。当我有更多的行时,成本会更高,例如,如果我有数百万用户,那么迭代需要更多的时间。如果你有数百万条记录,你不想将它们全部加载到内存中,是吗?如果是,我建议重新考虑你的方法。不过,Hibernate不是一个合适的框架来加载大块数据。您需要限制您的查询或使用分页。hi@Ean谢谢您的回答,但它与我发布的内容类似。获取映射列表并进行迭代。当我有更多的行时,成本会更高,例如,如果我有数百万用户,那么迭代需要更多的时间。如果你有数百万条记录,你不想将它们全部加载到内存中,是吗?如果是,我建议重新考虑你的方法。不过,Hibernate不是一个合适的框架来加载大块数据。您需要限制查询或使用分页。感谢您的回复,如果我有数百万用户,则循环加载需要更多时间,这就是我询问其他解决方案的原因。谢谢你,你认为Hibernate在不循环返回行的情况下如何创建映射?Hibernate是Java代码,与您的代码一样。它不会神奇地更有效率,因为Hibernate循环而不是代码。您正在进行预优化。做你必须做的事情,只有在你有问题的时候,在你有问题的地方才进行优化。如果有一天你真的有数百万用户,那么创建地图的循环将是你最小的问题。我知道循环是解决方案,正如我在我的查询中提到的,我只是想知道hibernate在这种情况下有什么魔法。如果是的话,它对我很有用,在这种情况下确实需要预优化,因为我在应用程序的大部分地方都使用地图。谢谢谢谢你的回复,如果我有数百万的用户,那么循环需要更多的时间来加载,这就是为什么我要求任何其他解决方案。谢谢你,你认为Hibernate在不循环返回行的情况下如何创建映射?Hibernate是Java代码,与您的代码一样。它不会神奇地更有效率,因为Hibernate循环而不是代码。您正在进行预优化。做你必须做的事情,只有在你有问题的时候,在你有问题的地方才进行优化。如果有一天你真的有数百万用户,那么创建地图的循环将是你最小的问题。我知道循环是解决方案,正如我在我的查询中提到的,我只是想知道hibernate在这种情况下有什么魔法。如果是的话,它对我很有用,在这种情况下确实需要预优化,因为我在应用程序的大部分地方都使用地图。非常感谢。