CriteriaQuery selectDistinct with @EmbeddedId 生成无效 SQL
CriteriaQuery selectDistinct with @EmbeddedId generating invalid SQL
我有一个 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
Hibernate 生成的 SQL 类似于下面的 SQL,其中嵌入 ID 的成员位于 distinct 子句中:
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 的实体来获取计数?
这似乎是 Hibernate 中的一个已知问题。
https://hibernate.atlassian.net/browse/HHH-9814
我有一个 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
Hibernate 生成的 SQL 类似于下面的 SQL,其中嵌入 ID 的成员位于 distinct 子句中:
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 的实体来获取计数?
这似乎是 Hibernate 中的一个已知问题。 https://hibernate.atlassian.net/browse/HHH-9814