Hibernate Spring JPA条件查询分组依据与to_char函数
我试着按天/月/年分组Hibernate Spring JPA条件查询分组依据与to_char函数,hibernate,group-by,spring-data-jpa,hibernate-criteria,Hibernate,Group By,Spring Data Jpa,Hibernate Criteria,我试着按天/月/年分组 Expression<String> expression = criteriaBuilder.function( "to_char", String.class, root.get("reqDate"), criteriaBuilder.parameter(String.class, "dateSegment")); query.multisel
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();
有约束力
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]
为什么它作为两个不同的参数绑定
日志
通过使查询看起来像
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
2
您的错误是使用
criteriaBuilder.parameter(String.class,“dateSegment”)
作为日期时间格式化程序。您应该使用cb.literal(“MM-YYYY”)
来代替它,然后所有这些都应该按预期工作。
因此,正确的代码如下所示:
Expression<String> expression = criteriaBuilder.function(
"to_char", String.class, root.get("reqDate"),
criteriaBuilder.literal("MM-YYYY"));
query.multiselect(
criteriaBuilder.count(root).alias(FIELD_COUNT), expression.alias("reqDate"))
.groupBy(expression);
entityManager.createQuery(query)
.getResultList();
Expression=criteriaBuilder.function(
“to_char”,String.class,root.get(“reqDate”),
criteriaBuilder.literal(“MM-YYYY”);
query.multiselect(
criteriaBuilder.count(root).alias(FIELD_count),expression.alias(“reqDate”))
.groupBy(表达式);
entityManager.createQuery(查询)
.getResultList();
请粘贴java堆栈跟踪错误消息
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
2
Expression<String> expression = criteriaBuilder.function(
"to_char", String.class, root.get("reqDate"),
criteriaBuilder.literal("MM-YYYY"));
query.multiselect(
criteriaBuilder.count(root).alias(FIELD_COUNT), expression.alias("reqDate"))
.groupBy(expression);
entityManager.createQuery(query)
.getResultList();