Я пытаюсь сгруппировать по дням / месяцам / годам
Expression<String> expression = criteriaBuilder.function(
"to_char", String.class, root.get("reqDate"),
criteriaBuilder.parameter(String.class, "dateSegment"));
query.multiselect(
criteriaBuilder.count(root).alias(FIELD_COUNT), expression.alias("reqDate"))
.groupBy(expression);
entityManager.createQuery(query)
.setParameter("dateSegment","MM-YYYY")
.getResultList();
, но это выдает ошибку, что поле выбора должно появиться в группе, что уже есть, я проверил сгенерированный sql, оноработает в дб консоли. но не с JPA, что я делаю неправильно?
сгенерированный sql
select
count(shipment0_.shipment_pk_id) as col_0_0_,
to_char(
shipment0_.requested_delivery_date_time,
?
) as col_2_0_
from
shipment shipment0_
group by
to_char(
shipment0_.requested_delivery_date_time,
?
)
с привязкой
2019-10-28 09:20:05,891 TRACE [0.0-8080-exec-6 Wcl5M33fEZTS5iF Wcl5M33fEZTS5iF] - o.h.type.descriptor.sql.BasicBinder : binding parameter [6] as [VARCHAR] - [MM-YYYY]
2019-10-28 09:20:05,891 TRACE [0.0-8080-exec-6 Wcl5M33fEZTS5iF Wcl5M33fEZTS5iF] - o.h.type.descriptor.sql.BasicBinder : binding parameter [10] as [VARCHAR] - [MM-YYYY]
почему он связывается как два разных параметра?
log
org.postgresql.util.PSQLException: ERROR: column "shipment0_.requested_delivery_date_time" must appear in the GROUP BY clause or be used in an aggregate function
Position: 383
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2440) ~[postgresql-42.2.5.jar:42.2.5]
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2183) ~[postgresql-42.2.5.jar:42.2.5]
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:308) ~[postgresql-42.2.5.jar:42.2.5]
at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:441) ~[postgresql-42.2.5.jar:42.2.5]