gpt4 book ai didi

java - Sum 运算符和 HashMap 对象作为结果

转载 作者:行者123 更新时间:2023-11-30 04:53:29 26 4
gpt4 key购买 nike

我创建了一个像这样的 JPQL:从类 c 中选择 sum(c.field1) field1, sum(c.field2) field2, sum(c.field3) field3

现在存在三个问题:1)我没有找到任何地方是否可以使用syntax sum(c.field1) field1;2)我没有在任何地方找到聚合查询是否可以有多个字段;3)当我尝试执行此查询时,编译器返回一个 vector !奇怪的是,我无法定义将返回的字段类型,因为它们不同(Long、Double 和 BigInteger),并且如果我尝试返回它返回的查询值:[[Ljava.lang.Object;@f7b046]

这是代码:



public Vector sumFilteredString(Class2 c2) {
String query="select sum(c1.field1) field1, sum(c1.field2) field2, sum(c1.field3) field3, sum(c1.field4) field4, sum(c1.field5) field5 from Class1 c1 WHERE c1.idClass2=c2.id";

Query q = getEntityManager().createQuery(query);

return (Vector)q.getResultList();
}

我尝试使用 Vector,因为对我来说,如果使用 HashMap.get("field name") 或 Vector.get(position) 检索这些值并不重要,因此如果您的解决方案包括为我检索 Vector,那么它就是同样的事情。

最佳答案

看看the javadocgetResultList() 方法返回一个 List。您不能假设返回的列表是 Vector。而且很有可能它不会是 Vector,因为自 JDK 1.2 以来没有人再使用 Vector。

您的方法应该返回一个List,而不是一个Vector

返回的List的每一行都是一个Object[]。这是由 JPA 规范定义的。该行的每个单元格元素都是与映射中字段类型相对应的对象。 AFAIK,当您对定义为 Long 的字段求和时,您将得到 Long 作为结果。如果对定义为 BigDecimal 的字段求和,您将得到 BigDecimal。

[[Ljava.lang.Object;@f7b046] 是在返回的列表上调用 toString() 的结果。它只告诉您该列表包含一个对象,其 toString()[Ljava.lang.Object;@f7b046。这意味着该对象是一个对象数组,并且该数组的 hashCode 为 f7b046

关于java - Sum 运算符和 HashMap 对象作为结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9330429/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com