Собственный запрос Javax/Hibernate Перекрестный запрос ArrayIndexOutOfBoundsException

Пытаюсь понять, почему этот запрос не работает...

Любые предложения/помощь?

Postgres с собственным запросом javax.

 Query query = em.createNativeQuery("select avg(period_01), avg(period_02), avg(period_03), avg(period_04), avg(period_05) avg(period_06), avg(period_07), " +
            "avg(period_08), avg(period_09), avg(period_10), avg(period_11), avg(period_12), avg(period_13), avg(period_14), avg(period_15), avg(period_16), avg(period_17), " +
            "avg(period_18), avg(period_19), avg(period_20), avg(period_21), avg(period_22), avg(period_23), avg(period_24), avg(period_25), avg(period_26), avg(period_27), " +
            "avg(period_28), avg(period_29), avg(period_30), avg(period_31), avg(period_32), avg(period_33), avg(period_34), avg(period_35), avg(period_36), avg(period_37), " +
            "avg(period_38), avg(period_39), avg(period_40), avg(period_41), avg(period_42), avg(period_43), avg(period_44), avg(period_45), avg(period_46), avg(period_47), " +
            "avg(period_48) " + "from(select * from crosstab( 'select t.date_, t.period, avg(t.price) as avg_price from ecossales_final_price t where t.date_ >= " +
            "\\'?1\\' and t.gxp=\\'?2\\' group by  t.period, t.date_ order by 1, 2') as ct(" +
            "  \"t.date_\" date " +
            ", \"period_01\"  numeric " +
            ", \"period_02\"  numeric, \"period_03\"  numeric, \"period_04\"  numeric, \"period_05\"  numeric, \"period_06\"  numeric, \"period_07\"  numeric, \"period_08\"  numeric " +
            ", \"period_09\"  numeric, \"period_10\"  numeric, \"period_11\"  numeric, \"period_12\"  numeric, \"period_13\"  numeric, \"period_14\"  numeric, \"period_15\"  numeric " +
            ", \"period_16\"  numeric, \"period_17\"  numeric, \"period_18\"  numeric, \"period_19\"  numeric, \"period_20\"  numeric, \"period_21\"  numeric, \"period_22\"  numeric " +
            ", \"period_23\"  numeric, \"period_24\"  numeric, \"period_25\"  numeric, \"period_26\"  numeric, \"period_27\"  numeric, \"period_28\"  numeric, \"period_29\"  numeric " +
            ", \"period_30\"  numeric, \"period_31\"  numeric, \"period_32\"  numeric, \"period_33\"  numeric, \"period_34\"  numeric, \"period_35\"  numeric, \"period_36\"  numeric " +
            ", \"period_37\"  numeric, \"period_38\"  numeric, \"period_39\"  numeric, \"period_40\"  numeric, \"period_41\"  numeric, \"period_42\"  numeric, \"period_43\"  numeric " +
            ", \"period_44\"  numeric, \"period_45\"  numeric, \"period_46\"  numeric, \"period_47\"  numeric, \"period_48\"  numeric " +
            ")" +
            ")s")
            .setParameter(1, cal.getTime())
            .setParameter(2, gxp);
  List list = query.getResultList();

Это перекрестный запрос.

Запрос работает в postgres, но когда я запускаю его через java как собственный запрос, я получаю ArrayIndexOutOfBoundsException, когда он пытается создать список (List list = query.getResultList();)


person Daryn    schedule 18.07.2017    source источник


Ответы (2)


Ваша часть сравнения дат ниже неправильно обработана.

t.date >= \\'?1\\' and t.gxp=\\'?2\\'

Взгляните сюда для справки Запрос сравнения дат в SQL

Короче говоря, сравните данные даты с датой типа «ГГГГ-ММ-ДД».

person Jisu Hong    schedule 18.07.2017
comment
Нет, это не так. Я сузил проблему до места размещения переменных. - person Daryn; 18.07.2017
comment
Итак, ваша группа [\\'?1\\' и t.gxp=\\'?2\\' по] оценивается как группа [\'?1\' и t.gxp=\'?2\' к] - person Jisu Hong; 18.07.2017
comment
Опустите двойные \s и сделайте это [\'?1\' и t.gxp=\'?2\' сгруппировать по] и сообщите мне, сработало ли это, чтобы я мог отредактировать свой ответ. - person Jisu Hong; 18.07.2017
comment
Все та же проблема :( Запрос работает с этим, где t.date_ ›= ''2016-01-01'' и t.gxp=''HEN2201'' Я думаю, что Javax не подбирает переменные из-за перекрестные одинарные кавычки? - person Daryn; 18.07.2017
comment
тогда попробуйте с двойными кавычками? [\?1\ и t.gxp=\?2\ сгруппировать по] - person Jisu Hong; 18.07.2017
comment
теперь я получаю PSQLException: ОШИБКА: столбец? 1 не существует - person Daryn; 18.07.2017
comment
Взгляните здесь на сравнение дат 19924236/ - person Jisu Hong; 18.07.2017
comment
Я предполагаю, что это поможет вам наверняка. - person Jisu Hong; 18.07.2017
comment
Окей круто. Заработало. Вместо того, чтобы пытаться поместить параметры, я просто вставил их в строку. например, где t.date_ ›= ''+dateString+'' и Спасибо за помощь! :) - person Daryn; 18.07.2017
comment
Пожалуйста, я не понял, что это данные даты, потому что они были помещены в отдельные строки - person Jisu Hong; 18.07.2017

Я сузил ошибку до места размещения переменных. Javax не должен экранировать их должным образом, поскольку он работает, если я действительно ввожу значения вместо? 1,? 2 и т. д.

where t.date_ >= \\'?1\\' and t.gxp=\\'?2\\' 

Решение состояло в том, чтобы просто поместить параметры в строку, например. где t.date_ >= ''"+theDateString+"''

person Daryn    schedule 18.07.2017