Оператор суммы и объект HashMap в результате - PullRequest
1 голос
/ 17 февраля 2012

Я создал JPQL следующим образом: выберите поле sum (c.field1) field1, sum (c.field2) field2, sum (c.field3) field3 из класса c

Теперь есть три проблемы:1) я нигде не нашел, смогу ли я использовать синтаксическую сумму (c.field1) field1;2) я нигде не нашел, если в агрегированном запросе может быть много полей;3) когда я пытаюсь выполнить этот запрос, компилятор возвращает вектор!Странно то, что я не могу определить тип полей, которые будут возвращаться, потому что они разные (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 («имя поля») или Vector.get (position), поэтому, если ваше решение состоит в том, чтобы получить Vector для меня, это то же самое.

1 Ответ

2 голосов
/ 17 февраля 2012

Посмотрите на javadoc . Метод getResultList() возвращает List. Вы не можете предполагать, что возвращаемый список является Vector. И есть очень хороший шанс, что это не будет Вектор, поскольку никто не использует Вектор с JDK 1.2.

Ваш метод должен возвращать List, а не Vector.

Каждая строка возвращаемого списка является Object[]. Это определяется спецификацией JPA. И каждый элемент ячейки строки - это объект, соответствующий типу поля в вашем отображении. AFAIK, когда вы суммируете поле, определенное как Long, вы получите Long как результат. Если вы суммируете поле, определенное как BigDecimal, вы получите BigDecimal.

[[Ljava.lang.Object;@f7b046] является результатом вызова toString() в возвращенном списке. Все, что он говорит вам, это то, что список содержит один объект, toString() которого равен [Ljava.lang.Object;@f7b046 Это означает, что объект является массивом объектов и что hashCode массива равен f7b046.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...