使用Criteria API计算对日期字段的不同查询

时间:2017-02-07 07:35:04

标签: java hibernate criteria-api

我正在尝试使用条件api计算对日期字段的不同查询。这就是我所做的;

CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<Long> criteriaQuery = criteriaBuilder.createQuery(Long.class);
Root<?> queryRoot = criteriaQuery.from(MyClass.class);

Expression dateExpression = queryRoot.get("myDate");

Expression dayExpression = criteriaBuilder.function("day", Integer.class, dateExpression);
Expression monthExpression = criteriaBuilder.function("month", Integer.class, dateExpression);
Expression dayExpression = criteriaBuilder.function("year", Integer.class, dateExpression);

criteriaQuery.select((Selection) criteriaBuilder.countDistinct(criteriaBuilder.concat(dayExpression, criteriaBuilder.concat(monthExpression, yearExpression))));

entityManager.executeCriteria(criteriaQuery, 0, 1);

我试着连接,因为countDistinct函数只获取一个表达式。

当我执行此操作时,我得到了;

javax.ejb.EJBTransactionRolledbackException: org.hibernate.hql.internal.ast.QuerySyntaxException: expecting CLOSE, found '(' near line 1, column 31 [select count(distinct function('day', generatedAlias0.manufacturedDate) || function('month', generatedAlias0.manufacturedDate) || function('year', generatedAlias0.manufacturedDate)) from com.myCompany.entity.MyClass as generatedAlias0]

根据我的谷歌搜索,条件查询不支持计数功能和建议使用本机查询。但我需要使用条件api或hibernate来实现它,因为我将它写入我们的框架,并且必须为所有实体正确运行。

我使用Wildfly 10.0附带的PosgreSQL 9.5和Hibernate 5.0.7。

如何使用Hibernate或Criteria Api进行此操作。

非常感谢任何帮助和建议。

0 个答案:

没有答案