CriteriaQuery selectDistinct с @EmbeddedId, генерирующий неверный SQL - PullRequest
0 голосов
/ 05 марта 2019

У меня есть CriteriaQuery Я создаю, где мне нужно получить количество строк, но когда у меня составной ключ, определенный с помощью @EmbeddedId, я получаю сообщение об ошибке из базы данных, когда Hibernate пытается запустить SQL:

14:35:16,356 WARN  [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (http-localhost/127.0.0.1:8080-2) SQL Error: 909, SQLState: 42000
14:35:16,357 ERROR [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (http-localhost/127.0.0.1:8080-2) ORA-00909: invalid number of arguments

Сгенерированный SQL Hibernate похож на SQL ниже, где члены встроенного идентификатора находятся в отдельном предложении:

select
    count(distinct tab_.COLUMN_A,
        tab_.COLUMN_B,
        tab_.COLUMN_C) as col_0_0_ 
from
    SOME_TABLE tab_ 
where
    -- ...

Сокращенная версия моего Java-кода:

CriteriaBuilder builder = entityManager.getCriteriaBuilder();

CriteriaQuery<Long> countQuery = builder.createQuery(Long.class);
Root<SomeEntity> root = query.from(SomeEntity.class);
countQuery.select(builder.countDistinct(root));

// ... then add predicates

long totalRowCount = entityManager.createQuery(countQuery).getSingleResult();

Есть ли другой (правильный) способ получить счет, используя сущность с @EmbeddedId?

1 Ответ

0 голосов
/ 06 марта 2019

Это, похоже, известная проблема в Hibernate.https://hibernate.atlassian.net/browse/HHH-9814

...