我编写了以下代码来获取“ ExampleEntity ”的计数:
cb = entityManager.getCriteriaBuilder();
CriteriaQuery<Long> cq = cb.createQuery(Long.class);
root = cq.from(ExampleEntity);
cq.select(cb.count(root));
return entityManager.createQuery(cq).getSingleResult();
生成的sql: 休眠:从EXAMPLEENTITY中选择count( exampleen0_.id )作为col_0_0_ exampleen0 _
但是,出于性能原因(使用Oracle 11g数据库),我需要生成以下sql:
所需的sql:从EXAMPLEENTITY中选择count(*)作为col_0_0_ exampleen0 _
创建JPQL查询非常简单,但我必须重写大量现有的过滤器代码。
如何使用CriteriaQuery生成“count(*)”而不是“count(exampleen0_.id)”?
答案 0 :(得分:0)
强迫Hibernate生成SQL的手非常困难。相反,我会考虑编写一个原生查询。
Query query = entityManager.createNativeQuery(
"SELECT COUNT(*) FROM EXAMPLEENTITY", Long.class);
return query.getSingleResult();
注意:当使用更复杂的逻辑时,本机查询会变得混乱,但是这个特定的符合ANSI标准并且应该在没有任何常用数据库的情况下运行而不必担心任何数据库具体的语法问题。
答案 1 :(得分:0)
适用于Oracle ......
BigDecimal count = (BigDecimal) manager.createNativeQuery(query).getSingleResult();