【问题标题】:How to get values from a list which is generated by "new map()" HQL?如何从“new map()”HQL 生成的列表中获取值?
【发布时间】:2013-01-11 10:36:12
【问题描述】:

这是我的 HQL。

List<Map<Long, String>> list = getSession().createQuery("select new map(id, fname) from Employee").list();

当我在控制台上打印列表变量时,我得到

{1=Kevin, 0=5}, {1=Louis, 0=8}, {1=Micheal, 0=15}

我只是想知道如何迭代上面的列表以及如何从列表中获取值。

请帮忙。提前致谢。

【问题讨论】:

    标签: java hibernate map hql


    【解决方案1】:

    在不知道涉及的类型的情况下,它会是这样的:

    for (Map.Entry entry : List) {
      System.out.println(entry.getKey());
      System.out.println(entry.getValue());
    }
    

    更新

    根据新样本,答案如下:

    for (Map<Long, String> map : list) {
      for (Entry<Long, String> entry : map.entrySet()) {
        System.out.println(entry.getKey());
        System.out.println(entry.getValue());
      }
    }
    

    【讨论】:

    • 知道类型怎么办?请参阅示例代码。 code List> list = getSession().createQuery("select new map(id, fname) from Employee").list();
    • 该示例代码与原始代码不同。我更新了你的问题和我的答案。
    • @Deepesh,您可以使用Map.EntryEntrystatic import import static java.util.Map.Entry;。如果你得到的是一个带有字符串的映射,而不是你的代码 sn-p 中的 long/string,那么你当然必须使用 List&lt;Map&lt;String, String&gt;&gt;
    • @Deepesh,StringLong 的超类是什么?对,是Object。显然有些代码会进行类型转换。因此,对于一个条目,该值似乎是 String (1=Praveen),而对于其他条目,该值似乎是 Long (0=1)。不确定您是否像这样将其取回,或者JVM是否因为您的泛型声明而这样做。这是我基于您发布的异常的假设。由于您没有告诉我们您在哪一行得到ClassCastException,所以我不太确定哪个选项是最好的。你可以试试List&lt;Map&lt;Object, Object&gt;&gt;
    • @Deepesh,System.out.println(entry.getValue()) 和值为 Object Java 自动调用对象的 toString() 方法。你需要从那里开始......通过调试或entry.getClass().getName()找出真正的类型然后你需要检查它的toString()并进一步开发你的程序。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-05
    • 2013-12-01
    • 2013-05-28
    • 1970-01-01
    • 2012-05-17
    • 1970-01-01
    • 2013-01-15
    相关资源
    最近更新 更多