Javax/Hibernate 原生查询 ArrayIndexOutOfBoundsException 交叉表查询
Javax / Hibernate native query ArrayIndexOutOfBoundsException crosstab query
试图找出此查询不起作用的原因...
有什么建议/帮助吗?
带有 javax 本机查询的 Postgres。
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 ();)
您下面的日期比较部分处理不当。
t.date >= \'?1\' and t.gxp=\'?2\'
看看这里寻求帮助
Query comparing dates in SQL
简而言之,将日期数据与'YYYY-MM-DD'
之类的日期进行比较
我已将错误缩小到变量的放置位置。 Javax 一定不能正确转义它们,因为如果我实际上将值放入而不是?1,?2 等
where t.date_ >= \'?1\' and t.gxp=\'?2\'
解决方案是将参数放入字符串中
例如
其中 t.date_ >= ''"+theDateString+"''
试图找出此查询不起作用的原因...
有什么建议/帮助吗?
带有 javax 本机查询的 Postgres。
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 ();)
您下面的日期比较部分处理不当。
t.date >= \'?1\' and t.gxp=\'?2\'
看看这里寻求帮助 Query comparing dates in SQL
简而言之,将日期数据与'YYYY-MM-DD'
之类的日期进行比较我已将错误缩小到变量的放置位置。 Javax 一定不能正确转义它们,因为如果我实际上将值放入而不是?1,?2 等
where t.date_ >= \'?1\' and t.gxp=\'?2\'
解决方案是将参数放入字符串中 例如 其中 t.date_ >= ''"+theDateString+"''