У меня есть 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?