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

标签 java jpql

我创建了一个像这样的 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/

相关文章:

hibernate - JPA - 在 IN 运算符中使用长数组会引发强制转换异常

java - 使用 Java 持久性查询语言仅在子查询中 FETCH FIRST n ROWS

java - 将 postgresql jdbc 驱动程序与 wildfly-arquillian-container-driven 结合使用

java - 'java' 、 'javaw' 和 'javaws' 之间有什么区别?

java - JavaSpring 中的 SQL 查询返回 Null

java - 在 JPQL 查询中使用数组

java - Tomcat Magnolia 5 管理中心面板错误

java - 如何配置 Genson 来反序列化日期?

java - Synchronized() block 未按预期工作

java - 有没有办法在 Spring Data @Query 注释值中使用常量?