Критерии подсчета записей API с COALESCE создает QuerySyntaxException - PullRequest
0 голосов
/ 11 июля 2019

можно ли считать записи слитыми?В Oracle это возможно с помощью этого выбора:

    SELECT
    COUNT(DISTINCT coalesce(foo.parent, foo.ident)) AS c    FROM
    FOO foo;

Я пытался сделать с этим кодом:

CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<Long> criteriaQuery = criteriaBuilder.createQuery(Long.class);
Root root = criteriaQuery.from(Foo.class);
CriteriaBuilder.Coalesce<Long> coalesce = criteriaBuilder.coalesce();
coalesce.value(root.<Long> get("parent"));
coalesce.value(root.<Long> get("id"));
CriteriaQuery<Long> select = criteriaQuery.select(criteriaBuilder.countDistinct(coalesce));
TypedQuery<Long> typedQuery = entityManager.createQuery(select);
return typedQuery.getSingleResult();

Но это выдает исключение

Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: expecting CLOSE, found '(' near line 1, column 31

Генерируетсязапрос

[select count(distinct coalesce(generatedAlias0.parent, generatedAlias0.id)) from foo.Foo as generatedAlias0]
...